VBA【公式】依据 “=”将多行矩阵公式变成单行公式

这篇具有很好参考价值的文章主要介绍了VBA【公式】依据 “=”将多行矩阵公式变成单行公式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

软件OCR生成的公式,有时候公式糊成一块了。

目的

将糊成一块的多行公式一行行分开(并且只对糊的公式操作),操作完后标记颜色为红色

解决步骤

1. 属性:ActiveDocument.OMaths.ParentFunction

ActiveDocument.OMaths的 ParentFunction

  • 如果公式为 多行矩阵
    ActiveDocument.OMaths.ParentFunction 返回对象
  • 如果公式为单行
    ActiveDocument.OMaths.ParentFunction 返回Nothing

然后 多行矩阵 变成 单行 用到 .ParentFunction.Remove,有了这个remove方法,后面的详细实现就好办了…

2. 编写VBA

依据多行公式前的等于号=,来作为分割依据

Sub test20240322【公式】word公式多行变单行()
    '关键点:oneOMath.ParentFunction.Remove
    '判断:等于号=
    '难点:熟练OMaths各属性方法
    Dim lngEnd&, count1%
    Dim oneOMath As Word.OMath, mathFun As OMathFunction 'ParentFunction的返回对象
    For Each oneOMath In ActiveDocument.OMaths
        Set mathFun = oneOMath.ParentFunction '设置对象,当无矩阵时,该值为Nothing
        If Not (mathFun Is Nothing) Then
            mathFun.Range.Select
            mathFun.Range.Font.ColorIndex = wdRed
            lngEnd& = mathFun.Range.End
            mathFun.Remove
            Do
                Selection.MoveRight unit:=wdCharacter, count:=2 '数量2 能跳转到公式域内
                count1% = Selection.MoveEndUntil("=", 200) '设置最大范围200
                If count1% > 1 And Selection.End < lngEnd& Then 'count1%大于0不能公式一行只有一个字符  扩选范围大于当前公式时取消执行
                    Selection.InsertParagraphAfter
                End If
                Selection.OMaths(1).Type = wdOMathInline '公式更改为嵌入
            Loop Until count1% = 0 Or Selection.End >= lngEnd&
        End If
    Next
    Set mathFun = Nothing '取消对象引用,释放对象
End Sub

以上就是编写的VBA代码,测试有效分享给大家。执行后 便能变成单行公式。

3. 效果预览

VBA【公式】依据 “=”将多行矩阵公式变成单行公式,word,矩阵,线性代数

总结

此函数目前只能根据 多行公式前的等于号= 来判断,可能会有没有改到的情况,水平所限只能这样了


附录:关于公式的MathML

下面是某矩阵公式:
VBA【公式】依据 “=”将多行矩阵公式变成单行公式,word,矩阵,线性代数
公式MathML为:

<math xmlns='http://www.w3.org/1998/Math/MathML'>
	<mrow>
		<mtable equalrows='true' equalcolumns='true'>
			<mtr>
				<mtd>
					<mrow>
						<mo>&#x00A0;</mo>
						<mo>=</mo>
						<mn>3</mn>
						<mi>a</mi>
						<mo>+</mo>
						<mn>4</mn>
						<mi>a</mi>
						<mo>+</mo>
						<mn>6</mn>
						<mi>b</mi>
						<mo>&#x2212;</mo>
						<mn>8</mn>
						<mi>b</mi>
						<mo>+</mo>
						<mn>10</mn>
						<mi>a</mi>
					</mrow>
				</mtd>
			</mtr>
			<mtr>
				<mtd>
					<mrow/>
				</mtd>
				<mtd>
					<mrow>
						<mo>&#x00A0;</mo>
						<mo>=</mo>
						<mn>17</mn>
						<mi>a</mi>
						<mo>&#x2212;</mo>
						<mn>2</mn>
						<mi>b</mi>
						<mo>;</mo>
					</mrow>
				</mtd>
			</mtr>
		</mtable>
	</mrow>  
</math>

执行Remove函数后,变成如下效果:
VBA【公式】依据 “=”将多行矩阵公式变成单行公式,word,矩阵,线性代数
其MathML变成:

<math>
	<mrow>
		<mtext>&#x00A0;</mtext>
		<mo>&#x00A0;</mo>
		<mo>=</mo>
		<mn>3</mn>
		<mi>a</mi>
		<mo>+</mo>
		<mn>4</mn>
		<mi>a</mi>
		<mo>+</mo>
		<mn>6</mn>
		<mi>b</mi>
		<mo>&#x2212;</mo>
		<mn>8</mn>
		<mi>b</mi>
		<mo>+</mo>
		<mn>10</mn>
		<mi>a</mi>
		<mtext>&#x00A0;&#x00A0;</mtext>
		<mo>&#x00A0;</mo>
		<mo>=</mo>
		<mn>17</mn>
		<mi>a</mi>
		<mo>&#x2212;</mo>
		<mn>2</mn>
		<mi>b</mi>
		<mo>;</mo>
	</mrow>
</math>

观察发现 MathML的 mtable mtr mtd 都不见了,留下了 mrow 。单行公式大概原理就是这样。文章来源地址https://www.toymoban.com/news/detail-845769.html

到了这里,关于VBA【公式】依据 “=”将多行矩阵公式变成单行公式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • excel中单行换成多行

    今天碰以下情况:   这在excel表中是在一个单元格,现在需要对其进行转换,将一个单元格换成多行 步骤: 1.删除换行符,添加一个逗号 2.选择数据-分列-分隔字符-逗号-确定 3.复制上述数据,选择性粘贴-转置 完成,解决此数据转换问题! 

    2024年02月16日
    浏览(31)
  • 多行SQL转成单行SQL

    如下图所示 将以上多行SQL转成单行SQL 正则表达式如下 结果如下 灵活使用,也未必只能使用Sublime Text 提供了一个在线工具

    2024年01月17日
    浏览(38)
  • python01-单行注释和多行注释

    从今天开始带着大家一起开始玩转python很多语法,我会由浅入深开始把python的相关内容都更新起来。 当然也不会太浅了,所以我的开篇是单行注释和多行注释。 程序的注释虽然为代码的功能带来不了什么实际的心功能变化,但为程序添加注释可以用来解释程序的某些部分的

    2024年01月21日
    浏览(33)
  • css 单行文字居中,多行文字左对齐

    2024年02月11日
    浏览(39)
  • css样式对单行和多行文本的隐藏

    在我们日常的网页中,尤其是新闻类的网页会遇到许多类似于这样的样式 多行甚至单行的文本隐藏+上省略号标题。 解决这一办法,需要利用css的样式进行改变 如下代码的演示: 单行文本隐藏: 多行文本隐藏: 主要知识点: 1、单行文本隐藏省略:文本不能换行、超出部分隐

    2024年02月08日
    浏览(32)
  • 微信小程序:单行输入和多行输入组件

    微信小程序提供了两种输入类型的输入框组件,分别是单行输入框 input 和多行输入框 textarea 。 1. 单行输入组件(input) 单行输入框 input input 是一个用于收集用户输入的组件,主要用于收集单行文本输入。 input组件用于录入单行文本,尽管input的基本功能是文本录入,但该组

    2024年02月06日
    浏览(29)
  • SQL 单行子查询 、多行子查询、单行函数、聚合函数 IN 、ANY 、SOME 、ALL

    单行子查询 子查询结果是 一个列一行记录 select a,b,c from table where a (select avg(xx) from table ) 还支持这种写法,这种比较少见 select a,b,c from table where (a ,b)=(select xx,xxx from table where col=‘000’ ) 多行子查询 子查询结果是 一个列多行记录 select a,b,c from table where a [ some | any |

    2024年02月14日
    浏览(37)
  • Linux:shell 中的单行注释和多行注释

    关于 shell 中的单行注释和多行注释 众所周知 ,使用#  比如想要注释 echo \\\"Hello World\\\" [root@test ~]# vim test.sh # echo \\\"Hello World\\\"         Shell 语言中是没有类似于 C/C++, Python 等计算机语言多行注释的功能的,可是对于脚本文件进行调试时,我们不可避免的需要对其中的代码进行注

    2024年02月15日
    浏览(33)
  • Mac对Vscode代码注释快捷键(单行//,多行/**/)

    单行注释 command+/ 多行注释 option+shift+A 取消注释同理,在执行一遍同样的快捷键

    2024年04月24日
    浏览(37)
  • Qt QtableWidget、QtableView表格删除选中行、删除单行、删除多行

    设置 操作 设置 操作 无需设置 setSelectionBehavior(QAbstractItemView::SelectRows) ,但是可以选择的那一列最好设置为不可编辑。按下Ctrl键,选择多行。 设置1 设置2 操作 QTableWidgetSelectionRange是Qt框架中用于表示QTableWidget中选定的一块单元格区域的类。以下是如何使用QTableWidgetSelectionR

    2024年02月01日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包