栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

一键批量将mathtype公式转换成word自带公式-vba/vbnet

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一键批量将mathtype公式转换成word自带公式-vba/vbnet

文章目录
  • 实现效果
  • 一、mathtype与word自带公式omaths
    • 1.mathtype在word中的表现形式
    • 2.实现原理
    • 3.为什么要将mathtype转换成word自带公式?
  • 二、代码实现方式
    • 1.word自带vba实现
    • 2.vbnet实现
  • 总结
  • 博主已封装好的vba/工程附件
  • TIPS:商用软件推荐


❤️转载请标注转载引用谢谢!

实现效果

一键批量将word内mathtype公式转换成word自带公式!


一、mathtype与word自带公式omaths 1.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)格式:

公式转换后如下:


 
  
   
    
     a
     2
    
    +
     b
     2
    
    
  
  


2.实现原理

word会自动将mathtype转换后的代码识别成公式,当Ctrl C复制这串代码后,Ctrl V黏贴进word时,会提供选择生成公式的类型,见下图:

omml公式即word自带的omaths公式,在已经安装了公式编辑器的前提下,你也可以直接复制上面的转换后代码到word中尝试一下!
【注意】如果之前已经点击了“记住我的选择”,则后续黏贴会记住选择直接黏贴!

所以:
【实现方式】
①先利用公式编辑器全文转换mathtype成MathML2.0(namespaceattr)格式
②利用word vba中的selection.find方法逐个复制copy转换后的公式,替换黏贴成无格式文本即可直接转换成omaths公式!

3.为什么要将mathtype转换成word自带公式?

目前大部分网页web应用或者程序运行对于公式的处理基本上是以LaTeX公式为主,omaths为辅,而公式编辑器商用识别费用不菲,所以能自己单独转换可以省一部分不少的功能开销!

二、代码实现方式 1.word自带vba实现

代码如下(示例):

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



2.vbnet实现

代码如下(示例):

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版:vba版
vbnet版:vbnet版

TIPS:商用软件推荐

如果想用已经打包好的商业软件,要求大规模公式转换,请了解一下专业软件:GrindEQ.
使用方法与效果见本人博文:
在word中10秒一键将900个mathtype公式转换成word自带公式–GrindEQ公式转换神器

公式转换功能很优秀!
官网:官网
价格:价格链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983166.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号