ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 731|回复: 12

[求助] 如何插入制表符和公式,之后插入制表符输入(1)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-18 12:40 | 显示全部楼层 |阅读模式

  1.             Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;


  2.             Word.Range range = null;

  3.             range = doc.Application.Selection.Range;

  4.             range.InsertBefore("\t");
  5.             range.Text = "x=2a";
  6.            doc.OMaths.Add(range).OMaths.BuildUp();
  7.             range.Collapse(WdCollapseDirection.wdCollapseEnd);
  8. range.InsertBefore("\t");
  9.         range.InsertAfter("(1)");
复制代码


c#运行后实现不了想要的效果,制表符丢失了,写入的内容也都跑到公式里了

TA的精华主题

TA的得分主题

发表于 2024-2-18 15:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
    Selection.TypeText text:=Chr(9)'插入制表符
    Selection.TypeText text:="1+1=2"'插入公式
    Selection.TypeText text:=Chr(9)'之后插入制表
    Selection.TypeText text:="(1)"'输入(1)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-2-18 16:19 | 显示全部楼层
本帖最后由 batmanbbs 于 2024-2-18 17:26 编辑

个人觉得和C#语言没有关系,VBA也会出现同样问题。


解决的方法:
一是先在光标后插入制表符+(1),然后再生成公式
image.png

二是不要使用insert,采用type(如楼上所述)

PS:咨询了 蜀中草莽 老师,原来在公示后直接添加#(1)就可以(注意是英文的小括号),一般不使用制表符,而且公式不会变小

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-18 18:02 | 显示全部楼层
过客fppt 发表于 2024-2-18 15:20
Selection.TypeText text:=Chr(9)'插入制表符
    Selection.TypeText text:="1+1=2"'插入公式
    S ...

c#如果是插入文本也没有问题,但是插入公式就不行就会乱的(公式要点击公式有公式编辑框)。

a1.png

想实现上面的效果

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-18 18:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
batmanbbs 发表于 2024-2-18 16:19
个人觉得和C#语言没有关系,VBA也会出现同样问题。

上面插入的应该不算是公式,因为也没有公式的编辑框

TA的精华主题

TA的得分主题

发表于 2024-2-18 19:01 | 显示全部楼层
test123599 发表于 2024-2-18 18:03
上面插入的应该不算是公式,因为也没有公式的编辑框

原理是一样的,就是不用insert,用type

举例如下图:
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-18 20:37 | 显示全部楼层
batmanbbs 发表于 2024-2-18 19:01
原理是一样的,就是不用insert,用type

举例如下图:

上面的代码是没有问题,插入了一个公式和 公式后面的内容, 但是我想修改为 公式前面也插入个tab,
  1. Sub oMath公式后添加编号3()

  2. Dim myRng As Range

  3. Set myRng = Selection.Range

  4. '想在公式之前插入个tab,为什么不行呢

  5. Selection.TypeText Chr(9)

  6. myRng.Text = "x=2a"

  7. With ActiveDocument.OMaths.Add(myRng)
  8.     .OMaths(1).BuildUp
  9.     .OMaths(1).Range.Select
  10. End With

  11. Selection.MoveRight , 2

  12. Selection.TypeText Chr(9) & "(1)"

  13. Set myRng = Nothing

  14. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-18 22:00 | 显示全部楼层
Sub InsertTabThenMathFormulaWithNumber()
    Dim myRng As Range
    Dim oMath As oMath
      
    ' 获取当前选定区域
    Set myRng = Selection.Range
      
    ' 在选定区域的开始处插入制表符
    myRng.InsertBefore Chr(9) ' 插入制表符
      
    ' 更新选定区域以跳过新插入的制表符
    myRng.SetRange Start:=myRng.Start + 1, End:=myRng.End
      
    ' 在制表符后插入数学公式
    myRng.Text = "插入的公式" ' 在选定区域设置公式内容
   
With ActiveDocument.OMaths.Add(myRng)
    .OMaths(1).BuildUp
    .OMaths(1).Range.Select
End With

Selection.MoveRight , 2

Selection.TypeText Chr(9) & "(1)"

Set myRng = Nothing
      
    ' 清理变量
    Set myRng = Nothing
    Set oMath = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-18 23:01 | 显示全部楼层
初步实现:插入制表符和公式和制表符和编号(还没有替换为自动的),让chatgpt帮我改的

  1. using Microsoft.Office.Interop.Word;

  2. public void InsertTabThenMathFormulaWithNumber()
  3. {
  4.     Range myRng;
  5.     OMath oMath;

  6.     // 获取当前选定区域
  7.     myRng = Globals.ThisAddIn.Application.Selection.Range;

  8.     // 在选定区域的开始处插入制表符
  9.     myRng.InsertBefore("\t"); // 插入制表符

  10.     // 更新选定区域以跳过新插入的制表符
  11.     myRng.SetRange(myRng.Start + 1, myRng.End);

  12.     // 在制表符后插入数学公式
  13.     myRng.Text = "插入的公式"; // 在选定区域设置公式内容

  14.     oMath = Globals.ThisAddIn.Application.ActiveDocument.OMaths.Add(myRng);
  15.     oMath.OMaths[1].BuildUp();
  16.     oMath.OMaths[1].Range.Select();

  17.     Globals.ThisAddIn.Application.Selection.MoveRight(WdUnits.wdCharacter, 2);
  18.     Globals.ThisAddIn.Application.Selection.TypeText("\t(1)");

  19.     // 清理变量
  20.     myRng = null;
  21.     oMath = null;
  22. }
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-19 08:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
加入了自动编号:

  1. Range myRng;
  2.             Range oMath;
  3.             Selection selection = Globals.ThisAddIn.Application.Selection;
  4.             // 获取当前选定区域
  5.             myRng = Globals.ThisAddIn.Application.Selection.Range;
  6.             // 在选定区域的开始处插入制表符
  7.             myRng.InsertBefore("\t"); // 插入制表符
  8.             // 更新选定区域以跳过新插入的制表符
  9.             myRng.SetRange(myRng.Start + 1, myRng.End);
  10.             // 在制表符后插入数学公式
  11.             myRng.Text = "插入的公式"; // 在选定区域设置公式内容
  12.             oMath = Globals.ThisAddIn.Application.ActiveDocument.OMaths.Add(myRng);
  13.             oMath.OMaths[1].BuildUp();
  14.             oMath.OMaths[1].Range.Select();
  15.             selection.MoveRight(WdUnits.wdCharacter, 2);
  16.             selection.TypeText("\t(");
  17.             selection.Fields.Add(selection.Range, Word.WdFieldType.wdFieldEmpty, "AUTONUM  \\* Arabic ", false);
  18.             selection.TypeText(")");
  19.             //插入新的段落
  20.             // 插入一个换行
  21.             selection.TypeParagraph();

  22.             // 输入"公式:"
  23.             selection.TypeText("公式:");

  24.             // 插入一个换行
  25.             selection.TypeParagraph();

  26.             // 清理变量
  27.             myRng = null;
  28.             oMath = null;
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 20:04 , Processed in 0.039460 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表