【VBA代码解决方案】md文档转Word后,全自动转换为标准的Word公式格式

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: 【VBA代码解决方案】md文档转Word后,全自动转换为标准的Word公式格式



写在最前面

博客是用.md文档写的,但是报告一般交word版本,于是遇到了问题:如何将md文档转Word后,全自动将公式格式标准化?

很遗憾没有搜到有用的教程,为此学了点VBA语法,成功实现这一功能

耗时:3h

借助这个教程,实现功能预计时间:1min

VBA代码全自动方法

将md文档导出为word

typora软件,选择左上角的文件,然后选择导出,选择word

如下为导出前后的示例:

可以看到,公式没有标准化

这个是运行VBA代码后的文档示例:

稍微有点瑕疵,但问题不大 ~

代码

下面是全部代码:

Sub ConvertSingleDollarToEquation()
    Dim doc As Document
    Set doc = ActiveDocument
    Dim rng As Range
    Set rng = doc.Content
    Dim searchText As String
    searchText = "$"
    Dim startRange As Range
    Dim endRange As Range
    Dim equationText As String
    ' 在文档中循环查找以$开头和结尾的文本
    Do While rng.Find.Execute(FindText:=searchText, Forward:=True) = True
        ' 设置开始范围
        Set startRange = rng.Duplicate
        startRange.Collapse Direction:=wdCollapseStart
        startRange.MoveEnd wdCharacter, 1
        ' 移动原始范围并寻找下一个$,标记为结束
        rng.Collapse Direction:=wdCollapseEnd
        If rng.Find.Execute(FindText:=searchText) = True Then
            ' 设置结束范围
            Set endRange = rng.Duplicate
            endRange.Collapse Direction:=wdCollapseEnd
            endRange.MoveStart wdCharacter, -1
            ' 提取公式文本
            equationText = doc.Range(startRange.End, endRange.Start).Text
            ' 删除原始的$包围的文本
            doc.Range(startRange.Start, endRange.End).Delete
            ' 创建新的范围用于插入公式
            Set rng = doc.Range(startRange.Start, startRange.Start)
            rng.Text = equationText
            rng.OMaths.Add rng
            rng.OMaths.BuildUp
            Set rng = rng.Duplicate
            rng.Collapse Direction:=wdCollapseEnd
        End If
    Loop
End Sub

如何运行VBA代码

按照以下步骤操作:

  1. 打开Word文档:打开包含要转换文本的Word文档。
  2. 启动VBA编辑器:按下 Alt + F11 打开VBA编辑器。
  3. 插入新模块:在项目浏览器中,右键点击您的文档,选择“插入” -> “模块”。

  1. 编写宏代码:在新模块中复制并粘贴代码。

运行的两种方式:

6. 运行宏①:直接点击运行即可。

  1. 运行宏②:返回到Word,按下 Alt + F8,在弹出的对话框中选择“VBA代码中的函数名”,然后点击“运行”。

注意事项

  • 在运行VBA脚本之前,请确保您的文档已备份,以免出现数据丢失。
  • 此脚本假定文档中的公式是用双美元符号$$包围的。如果您的文档使用不同的符号包围公式,您需要相应地调整 .Text = "\$(*)\$" 这一行中的匹配模式。
  • 如果您在运行宏时遇到任何问题,或者不熟悉VBA,可能需要寻求专业帮助。

一些如何实现的回忆记录

步骤解析

写代码前,首先想明白代码的实现逻辑,这里是想取代手动将文本转换为Word公式,所以首先明确人工操作的步骤

要从步骤解析开始,并据此写出上述VBA代码,我们需要遵循一系列逻辑步骤来处理Word文档中由美元符号$包围的文本,并将它们转换为Word中的标准公式格式。以下是这一过程的逐步分解以及如何根据这些步骤编写代码:

手动将文本转换为Word公式

  1. 选中文本:在Word文档中,选中一个要转换的文本,例如$T(a)$
  2. 插入公式
  • 在Word的菜单栏上,点击“插入”(Insert)。
  • 在“插入”选项中,选择“公式”(Equation),在菜单的最右侧。
  1. 重复此过程:对文档中的每个公式重复上述步骤。

代码逻辑步骤设想

  1. 定义和设置文档范围:
  • 首先,我们需要引用当前活动的Word文档。
  • 然后,定义一个范围(Range),覆盖整个文档的内容。
  1. 指定搜索文本:
  • 我们要查找的文本是由$符号包围的公式。
  1. 搜索并定位公式:
  • 需要在文档中循环搜索每个以$开始和结束的文本片段。
  1. 提取并删除原始公式文本:
  • 一旦找到以$包围的文本,我们需要提取这些公式。
  • 然后删除原始的以$包围的文本,为插入标准公式格式做准备。
  1. 插入并格式化公式:
  • 在原始公式文本被删除的位置插入提取的公式文本。
  • 将这些文本转换为Word的公式格式。

在这段代码中,我们按照解析的步骤来逐步实现了在Word文档中自动查找、提取、删除并转换公式的功能。这种方法能够大大减少手动编辑公式的工作量,特别适用于包含大量公式的文档。

代码解析

这段VBA代码的目的是,将Microsoft Word文档中由单个美元符号$包围的文本自动转换为标准的Word公式格式。下面是对代码的逐行解释:

代码解释

  1. 定义并初始化变量:
  • Dim doc As Document: 定义一个Document类型的变量doc
  • Set doc = ActiveDocument: 将当前活动的Word文档设置为doc
  1. 设置搜索范围:
  • Dim rng As Range: 定义一个Range类型的变量rng
  • Set rng = doc.Content: 将doc的全部内容设为rng的搜索范围。
  1. 设置搜索文本:
  • Dim searchText As String: 定义一个字符串变量searchText
  • searchText = "$": 将要搜索的文本设置为单个美元符号$
  1. 定义额外的Range变量:
  • Dim startRange As Range, Dim endRange As Range: 定义两个Range变量,分别用于标记公式文本的开始和结束位置。
  • Dim equationText As String: 定义一个字符串变量用于存储提取的公式文本。
  1. 开始循环搜索并处理公式:
  • Do While rng.Find.Execute(FindText:=searchText, Forward:=True) = True: 在文档rng范围内循环搜索$符号。
  1. 定位公式的开始:
  • Set startRange = rng.Duplicate: 复制找到的$符号的位置到startRange
  • startRange.Collapse Direction:=wdCollapseStart: 将startRange折叠到起始位置。
  • startRange.MoveEnd wdCharacter, 1: 将startRange的结束位置向后移动一个字符,以包括$符号。
  1. 寻找并定位公式的结束:
  • rng.Collapse Direction:=wdCollapseEnd: 将rng范围折叠到找到的$之后的位置。
  • If rng.Find.Execute(FindText:=searchText) = True Then: 在新的rng范围内再次搜索$
  • Set endRange = rng.Duplicate: 复制第二个$的位置到endRange
  • endRange.Collapse Direction:=wdCollapseEnd: 将endRange折叠到结束位置。
  • endRange.MoveStart wdCharacter, -1: 将endRange的开始位置向前移动一个字符,以包括$符号。
  1. 提取并删除原始公式文本:
  • equationText = doc.Range(startRange.End, endRange.Start).Text: 提取两个$符号之间的公式文本。
  • doc.Range(startRange.Start, endRange.End).Delete: 删除原始的由$包围的文本。
  1. 插入并格式化公式:
  • Set rng = doc.Range(startRange.Start, startRange.Start): 创建一个新的范围rng,在原始公式文本被删除的位置。
  • rng.Text = equationText: 将提取的公式文本设置到新的rng范围。
  • rng.OMaths.Add rng: 将rng中的文本转换为公式。
  • rng.OMaths.BuildUp: 格式化公式。
  1. 准备下一次循环:
  • Set rng = rng.Duplicate: 复制rng以准备下一次循环。
  • rng.Collapse Direction:=wdCollapseEnd: 将rng折叠到结束位置。
  1. 循环结束:
  • Loop: 结束循环。

总结

这个脚本通过自动化的方式,将Word文档中由单个$符号包围的文本转换为Word公式。它逐步查找每个公式,提取并删除原始文本,然后在相同位置插入并格式化为标准的Word公式。这种方法大大提高了将文本公式转换为专业公式的效率,特别适合处理包含大量公式的文档。

其他

背景介绍

在处理数学、科学或工程文档时,我们经常遇到需要将文本格式的公式转换为标准的数学公式表示。特别是在使用Microsoft Word时,这种需求变得尤为明显。

当你有一个包含众多以美元符号$包围的文本公式的文档,比如$E=mc^2$,你希望将其转换为Word中的专业公式格式。手动执行这一任务不仅费时,而且极易出错。因此,自动化这一过程显得非常必要。

应用场景

这个脚本非常适用于学术工作者、学生、工程师或任何需要在Word文档中处理大量公式的人士。无论是准备学术论文、报告、教学材料还是技术文档,这个脚本都可以大大简化公式处理的工作。

VBA脚本介绍

为了解决这个问题,我编写了一个VBA(Visual Basic for Applications)脚本。这个脚本能够遍历Word文档中的所有文本,自动识别出由单个$符号包围的文本公式,并将它们转换为Word的内置公式格式。这不仅提高了工作效率,而且保证了公式格式的统一和准确性。

如何使用

使用这个脚本非常简单。你只需将其复制到Word的VBA编辑器中,然后运行。脚本会自动查找所有由$符号包围的文本,并将其转换为格式化的公式。这意味着你可以将任何形式的文本公式快速转换为专业的数学表示,无需手动编辑。

总结

通过这个VBA脚本,我们展示了如何有效地利用编程技巧来简化日常文档处理工作。这不仅提高了效率,而且提升了文档的专业性。尝试这个脚本,你会发现它是处理Word中公式的强大工具。不论你是初学者还是经验丰富的专业人士,这个脚本都能为你的工作带来显著的便利。


希望这篇博客对寻求提高工作效率和文档质量的你来说,提供了一个实际且易于理解的编程应用示例。在编程和自动化的世界中,总有更多的可能性等待我们去探索。

目录
相关文章
|
Python
matplotlib 按指定的时间间隔生成坐标轴
matplotlib 提供了自定义生成时间轴的库,而当我们需要按照自己定义的时间间隔去生成时间轴时,时间轴并没有正常显示,只是按照一个时间跨度更大的方式显示,本文强制 matplotlib 严格按照要求自定义的时间间隔来坐标轴,并对每一行代码做了详细的说明。
7403 0
matplotlib 按指定的时间间隔生成坐标轴
|
开发工具 git 缓存
Git忽略规则.gitignore不生效
在项目开发过程中个,一般都会添加 .gitignore 文件,规则很简单,但有时会发现,规则不生效。 原因是 .gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
62019 4
|
Kubernetes Linux 网络安全
kubernetes(k8s)篇(一)(2022年最新)使用KubeKey安装k8s集群及k8sUI界面KubeSphere
kubernetes(k8s)篇(一)(2022年最新)使用KubeKey安装k8s集群及k8sUI界面KubeSphere
3617 0
kubernetes(k8s)篇(一)(2022年最新)使用KubeKey安装k8s集群及k8sUI界面KubeSphere
|
人工智能 API 决策智能
智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
【7月更文挑战第8天】智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
16868 134
智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
|
10月前
|
编解码 人工智能 缓存
通义万相上新,登顶!
通义万相上新,登顶!
342 0
贝叶斯统计中常见先验分布选择方法总结
本文详细介绍了贝叶斯统计中三种常见的先验分布选择方法:经验贝叶斯方法、信息先验和无信息/弱信息先验。
447 3
贝叶斯统计中常见先验分布选择方法总结
|
数据采集 缓存 安全
2024年最佳http 代理 IP选择及其价格分析
2024年,多家服务商如快代理、123Proxy、巨量代理、IPIDEA等提供不同类型的代理IP,以满足数据采集、跨境电商等多种需求。
2024年最佳http 代理 IP选择及其价格分析
|
NoSQL 数据挖掘 定位技术
如何让geopandas支持写出gdb文件
如何让geopandas支持写出gdb文件
441 4
|
人工智能 安全 物联网
【网安AIGC专题】46篇前沿代码大模型论文、24篇论文阅读笔记汇总
【网安AIGC专题】46篇前沿代码大模型论文、24篇论文阅读笔记汇总
413 1
|
弹性计算 Linux 数据中心
阿里云香港服务器30M大带宽24元1个月,288元一年
阿里云香港服务器30M大带宽24元1个月,288元一年,阿里云香港服务器2核1G、30M带宽、40GB ESSD系统盘优惠价格24元/月,288元一年,每月流量1024GB,多配置可选,阿里云百科整理分享阿里云香港服务器优惠活动、详细配置价格表和购买条件

热门文章

最新文章