❤️转载请标注转载引用谢谢!
一键批量将word内mathtype公式转换成word自带公式!
mathtype在word是以 inlineshape 形状类型插入到word中的,如果运行下面vba代码,所有的mathtype将被删除.但inlineshape查找却识别不出查找的对象是图片还是mathtype公式!
Sub test1()
Dim a As InlineShape
For Each a In Word.ActiveDocument.InlineShapes
a.Delete
Next
End Sub
而解析时候,目前本章方法可操作的,是将mathtype先转换成MathML2.0(namespaceattr)格式:
公式转换后如下:
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<msqrt>
<mrow>
<msup>
<mi>a</mi>
<mn>2</mn>
</msup>
<mo>+</mo><msup>
<mi>b</mi>
<mn>2</mn>
</msup>
</mrow>
</msqrt>
</mrow>
</math>
word会自动将mathtype转换后的代码识别成公式,当Ctrl C复制这串代码后,Ctrl V黏贴进word时,会提供选择生成公式的类型,见下图:
omml公式即word自带的omaths公式,在已经安装了公式编辑器的前提下,你也可以直接复制上面的转换后代码到word中尝试一下!
【注意】如果之前已经点击了“记住我的选择”,则后续黏贴会记住选择直接黏贴!
所以:
【实现方式】
①先利用公式编辑器全文转换mathtype成MathML2.0(namespaceattr)格式
②利用word vba中的selection.find方法逐个复制copy转换后的公式,替换黏贴成无格式文本即可直接转换成omaths公式!
目前大部分网页web应用或者程序运行对于公式的处理基本上是以LaTeX公式为主,omaths为辅,而公式编辑器商用识别费用不菲,所以能自己单独转换可以省一部分不少的功能开销!
代码如下(示例):
Sub 公式转换()
'On Error Resume Next
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
With Selection.Find
.Text = "\
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.HomeKey wdStory
While Selection.Find.Execute
Selection.Copy
Dim t, i As Single
t = Timer
Do
i = i + 1
Loop While Timer - t < 0.05
Selection.PasteAndFormat (WdRecoveryType.wdFormatPlainText)
Wend
End Sub
代码如下(示例):
Imports Microsoft.Office.Interop.Word
Module Module1
Sub 公式转换(app As Microsoft.Office.Interop.Word.Application, time As Double)
Dim w As Microsoft.Office.Interop.Word.Application = app
w.Selection.Find.ClearFormatting()
w.Selection.Find.Replacement.ClearFormatting()
With w.Selection.Find
.Text = "^p"
.Replacement.Text = ""
.Forward = True
.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
w.Selection.Find.Execute(Replace:=WdReplace.wdReplaceAll)
w.Selection.Find.ClearFormatting()
With w.Selection.Find
.Text = "\
.Replacement.Text = ""
.Forward = True
.Wrap = WdFindWrap.wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
w.Selection.SetRange(0, 0)
While w.Selection.Find.Execute()
w.selection.copy
Dim t, i As Single
t = Timer
Do
i += 1
Loop While Timer - t < time
w.Selection.PasteAndFormat(WdRecoveryType.wdFormatPlainText)
End While
End Sub
End Module
该处使用的url网络请求的数据。
其实公式转换应用非常多,LaTeX、omaths、mathtype相互转换应用非常广,其他公式的相互之间的转换请见本人博客专栏-office vba.
vba版:vba版
vbnet版:vbnet版
如果想用已经打包好的商业软件,要求大规模公式转换,请了解一下专业软件:GrindEQ.
使用方法与效果见本人博文:
在word中10秒一键将900个mathtype公式转换成word自带公式–GrindEQ公式转换神器
公式转换功能很优秀!
官网:官网
价格:价格链接