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

【VBA解决方案】全自动将Word中的文本公式转换为标准公式

  • 写在最前面
  • VBA代码全自动方法
    • 将md文档导出为word
    • 代码
      • 如何运行VBA代码
      • 注意事项
  • 一些如何实现的回忆记录
    • 步骤解析
      • 手动将文本转换为Word公式
      • 代码逻辑步骤设想
      • 代码解析
      • 代码解释
      • 总结
  • 其他
    • 背景介绍
    • 应用场景
    • VBA脚本介绍
    • 如何使用
    • 总结

请添加图片描述

🌈你好呀!我是 是Yu欸
🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

写在最前面

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

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

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

VBA代码全自动方法

将md文档导出为word

typora软件,选择左上角的文件,然后选择导出,选择word
如下为导出前后的示例:

在这里插入图片描述

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

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

在这里插入图片描述
稍微有点瑕疵,但问题不大 ~

代码

下面是全部代码:

Sub ConvertSingleDollarToEquation()Dim doc As DocumentSet doc = ActiveDocumentDim rng As RangeSet rng = doc.ContentDim searchText As StringsearchText = "$"Dim startRange As RangeDim endRange As RangeDim equationText As String' 在文档中循环查找以$开头和结尾的文本Do While rng.Find.Execute(FindText:=searchText, Forward:=True) = True' 设置开始范围Set startRange = rng.DuplicatestartRange.Collapse Direction:=wdCollapseStartstartRange.MoveEnd wdCharacter, 1' 移动原始范围并寻找下一个$,标记为结束rng.Collapse Direction:=wdCollapseEndIf rng.Find.Execute(FindText:=searchText) = True Then' 设置结束范围Set endRange = rng.DuplicateendRange.Collapse Direction:=wdCollapseEndendRange.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 = equationTextrng.OMaths.Add rngrng.OMaths.BuildUpSet rng = rng.Duplicaterng.Collapse Direction:=wdCollapseEndEnd IfLoop
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),在菜单的最右侧。
  3. 重复此过程:对文档中的每个公式重复上述步骤。

代码逻辑步骤设想

  1. 定义和设置文档范围:

    • 首先,我们需要引用当前活动的Word文档。
    • 然后,定义一个范围(Range),覆盖整个文档的内容。
  2. 指定搜索文本:

    • 我们要查找的文本是由$符号包围的公式。
  3. 搜索并定位公式:

    • 需要在文档中循环搜索每个以$开始和结束的文本片段。
  4. 提取并删除原始公式文本:

    • 一旦找到以$包围的文本,我们需要提取这些公式。
    • 然后删除原始的以$包围的文本,为插入标准公式格式做准备。
  5. 插入并格式化公式:

    • 在原始公式文本被删除的位置插入提取的公式文本。
    • 将这些文本转换为Word的公式格式。

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

代码解析

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

代码解释

  1. 定义并初始化变量:

    • Dim doc As Document: 定义一个Document类型的变量doc
    • Set doc = ActiveDocument: 将当前活动的Word文档设置为doc
  2. 设置搜索范围:

    • Dim rng As Range: 定义一个Range类型的变量rng
    • Set rng = doc.Content: 将doc的全部内容设为rng的搜索范围。
  3. 设置搜索文本:

    • Dim searchText As String: 定义一个字符串变量searchText
    • searchText = "$": 将要搜索的文本设置为单个美元符号$
  4. 定义额外的Range变量:

    • Dim startRange As Range, Dim endRange As Range: 定义两个Range变量,分别用于标记公式文本的开始和结束位置。
    • Dim equationText As String: 定义一个字符串变量用于存储提取的公式文本。
  5. 开始循环搜索并处理公式:

    • Do While rng.Find.Execute(FindText:=searchText, Forward:=True) = True: 在文档rng范围内循环搜索$符号。
  6. 定位公式的开始:

    • Set startRange = rng.Duplicate: 复制找到的$符号的位置到startRange
    • startRange.Collapse Direction:=wdCollapseStart: 将startRange折叠到起始位置。
    • startRange.MoveEnd wdCharacter, 1: 将startRange的结束位置向后移动一个字符,以包括$符号。
  7. 寻找并定位公式的结束:

    • 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的开始位置向前移动一个字符,以包括$符号。
  8. 提取并删除原始公式文本:

    • equationText = doc.Range(startRange.End, endRange.Start).Text: 提取两个$符号之间的公式文本。
    • doc.Range(startRange.Start, endRange.End).Delete: 删除原始的由$包围的文本。
  9. 插入并格式化公式:

    • Set rng = doc.Range(startRange.Start, startRange.Start): 创建一个新的范围rng,在原始公式文本被删除的位置。
    • rng.Text = equationText: 将提取的公式文本设置到新的rng范围。
    • rng.OMaths.Add rng: 将rng中的文本转换为公式。
    • rng.OMaths.BuildUp: 格式化公式。
  10. 准备下一次循环:

    • Set rng = rng.Duplicate: 复制rng以准备下一次循环。
    • rng.Collapse Direction:=wdCollapseEnd: 将rng折叠到结束位置。
  11. 循环结束:

    • Loop: 结束循环。

总结

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

其他

背景介绍

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

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

应用场景

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

VBA脚本介绍

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

如何使用

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

总结

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#中的HashSet

在C#中,HashSet是一种集合类型,它实现了哈希表的数据结构。HashSet用于存储一组唯一的对象,并提供高效的查找、插入和删除操作。 HashSet的主要特点如下: 唯一性:HashSet中的元素是唯一的,不允许重复的元素…

Adb windows脚本

#由于测试不太会用adb指令 所以自己写了一个adb的脚本,简化adb的使用 echo off set SAVE_DIRD:\screen if not exist "%SAVE_DIR%" ( mkdir "%SAVE_DIR%" echo %SAVE_DIR%创建成功 )set ADB_PATHD:\SDK\sdk\platform-tools\adb.exeif &quo…

【原创教程】轻松搞定川崎机器人调试

1、确定川崎机器人坐标系 机器人坐标系一般有以下四种:世界坐标(大地坐标)、基坐标、工具坐标、工件坐标。在前面的文章中,我们已经有所阐述,大家可以参考前面文章。 下面川崎以工具坐标系为例(现场川崎机…

python二进制读取文件快速定位及半个中文字符问题处理

1. 打开文件快速定位读取的方法 在Python中,可以使用open()函数来打开文件。要快速定位到特定的字节位置并读取或写入内容,可以结合使用seek()方法。 下面是一个示例代码,展示了如何使用seek()方法在二进制模式下打开文件并快速定位到指定位…

4.Doris数据导入导出

导入 Doris支持多种数据源导入如S3 HDFS Kafka 本地文件 Binlog 等 官方文档 导入的原子性保证 Doris 的每一个导入作业,不论是使用 Broker Load 进行批量导入,还是使用 INSERT 语句进行单条导入,都是一个完整的事务操作。导入事务可以保证…

兰陵Ex导出(<c:improt>标签覆盖问题)

1.同一个页面单个导出 1.1 增加导出按钮 找到对应的页面&#xff0c;导出按钮增加在合适的位置&#xff0c;【count】关键字可调整排序。 <div style"display: inline-block; float:right;vertical-align: middle;"><ui:toolbar id"toolbarOperate&quo…

双面墨水屏电子桌牌:传统纸质桌牌的完美替代品

今天&#xff0c;中科慧显想要和大家分享的是&#xff0c;关于双面墨水屏电子桌牌在实际使用场景中的优势及好处。随着科技的快速发展&#xff0c;各种新型的电子办公产品不断涌现&#xff0c;其中双面墨水屏电子桌牌就是一种具有创新性的电子办公产品。相较于传统的纸质桌牌&a…

OpenCV图像的基本操作

图像的基本操作&#xff08;Python&#xff09; 素材图 P1&#xff1a;die.jpg P2&#xff1a;cool.jpg V&#xff1a;rabbit.mp4&#xff0c; 下载地址 读取展示-图像 import cv2img_1 cv2.imread(./die.jpg) # default cv2.IMREAD_COLOR print("die.jpg shape(imre…

2024年生物技术与医学科学国际学术研讨会(ISBAMS 2024)

2024年生物技术与医学科学国际学术研讨会&#xff08;ISBAMS 2024&#xff09; 重要信息 会议官网&#xff1a;http://www.isbams.com会议地址&#xff1a;上海召开日期&#xff1a;2024/2/20截稿日期&#xff1a;2024/2/10 &#xff08;先投稿&#xff0c;先审核&#xff0c;先…

jmeter接口自动化测试工具在企业开展实际的操作

在企业使用jmeter开展实际的接口自动化测试工具&#xff0c;建议按如下操作流程&#xff0c; 可以使整个接口测试过程更规范&#xff0c;更有效。 接口自动化的流程&#xff1a; 1、获取到接口文档&#xff1a;swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…

31.【TypeScript 教程】混入(Mixins)

TypeScript 混入(Mixins) 混入&#xff08;Mixins&#xff09;是面向对象编程中的一个比较重要的概念。本节将会通过一个实例逐步介绍混入是如何在 TypeScript 中使用的。 1. 解释 在 TypeScript 中&#xff0c;可以根据不同的功能定义多个可复用的类&#xff0c;它们将作为 …

【python】爬取豆瓣影评保存到Excel文件中【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 【往期相关文章】 爬取豆瓣电影排行榜Top250存储到Excel文件中 爬取豆瓣电影排行榜TOP250存储到CSV文件中 爬取知乎热榜Top50保存到Excel文件中 爬取百度热搜排行榜Top50可视化 爬取斗鱼直播照片保存到本地目录 爬…

仓储管理系统——软件工程报告(详细设计)④

详细设计 一、系统功能模块的划分 根据系统的功能性需求&#xff0c;本文将部队仓库管理系统分为以下六大模块&#xff1a;系统管理模 块、基础数据模块、出入库管理模块、库存管理模块、仓库信息管理模块、作业管理模 块&#xff0c;每个模块内部又分为很多小功能模块&#…

win10+elasticsearch8.12 安装教程

Elasticsearch是一种搜索引擎&#xff0c;本地安装完成之后&#xff0c;可使用其他编程语言&#xff08;例如python&#xff09;与elasticsearch建立连接&#xff0c;然后使用python脚本搜索elasticsearch中的数据 1下载 elasticsearch elasticsearch最新版官网下载链接 点击…

颠覆式创新:LAXCUS分布式操作系统7.0

在这轮AI浪潮中&#xff0c;英伟达已经获得了硬件算力入口&#xff0c;Laxcus要获取软件算力入口。 有几位网友想了解我们正在研发的Laxcus分布式操作系统7.0的情况。应他们要求&#xff0c;今天就说说Laxcus 7.0版本。Laxcus 7.0是一个全新的操作系统&#xff0c;具有很多独特…

Redis在生产环境中可能遇到的问题与解决方案(一)

Redis是一款高性能的内存数据库&#xff0c;广泛应用于生产环境中&#xff0c;但在实际应用中也会遇到一些问题。本文将详细探讨Redis在生产环境中可能遇到的问题&#xff0c;并提供相应的解决方案&#xff0c;以确保系统的稳定性和性能。 1. 内存耗尽 问题描述 在高负载情况…

uni-app 国际化

vue i18n v9的迁移后的$t()无法获取数组、对象 http://t.csdnimg.cn/WkCHy api:vue i18n [intlify] Not found ‘language’ key in ‘zh-Hans’ locale messages. [intlify] Fall back to translate ‘language’ key with ‘zh’ locale. [intlify] Not found ‘languag…

快速数论变换NTT学习笔记

什么是NTT&#xff1f; 数论变换&#xff08;number-theoretic transform, NTT&#xff09;是离散傅里叶变换&#xff08;DFT&#xff09;在数论基础上的实现。 NTT是一种计算卷积的快速算法&#xff0c;FFT也是其中一种。 但是FFT具有一些实现上的缺点&#xff0c;举例来说&…

C++技术要点总结, 面试必备, 收藏起来慢慢看

目录 1. 语言对比 1.1 C 11 新特性 2.2 C 和 C 的区别 2.3 Python 和 C 的区别 2. 编译内存相关 2.1. C 程序编译过程 2.2. C 内存管理 2.3. 栈和堆的区别 2.4. 变量的区别 2.5. 全局变量定义在头文件中有什么问题&#xff1f; 2.6. 内存对齐 2.7. 什么是内存泄露 …

ISO27001认证:企业与个人发展的必备之选

ISO27001认证&#xff0c;对于企业和个人来说&#xff0c;都具有极高的价值和重要性。作为国际权威的信息安全管理体系标准&#xff0c;它为企业提供了保障信息安全、防范风险和提升竞争力的有力工具。 &#x1f4bc;对企业的价值&#xff1a; ISO27001认证可以帮助企业满足国家…