【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 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),在菜单的最右侧。
  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中公式的强大工具。不论你是初学者还是经验丰富的专业人士,这个脚本都能为你的工作带来显著的便利。


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息安全认证首选CISP-PTE

🔥在信息安全领域,CISP-PTE认证正逐渐成为行业的新星。作为中国信息安全测评中心推出的专业认证,CISP-PTE为信息安全从业者提供了国内Z高标准的资质培训。 🎯为什么选择CISP-PTE? 1️⃣业界认可:CISP-PTE是…

JAVA_EE_api_中英文对照版

点击即可下载: JAVA_EE_api_中英文对照版

STM32标准库——(3)GPIO输入

1.按键简介 按键:常见的输入设备,按下导通,松手断开 按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动 1.1 硬件电路图 上面两个是外加上拉电阻(常用…

Python学习从0到1 day9 Python函数

苦难是花开的伏笔 ——24.1.25 函数 1.定义 函数:是组织好的,可重复使用的,用来实现特定功能的代码段 2.案例 在pycharm中完成一个案例需求:不使用内置函数len(),完成字符串长度的计算 #统计字…

MyBatis 批量插入数据优化

前言 最近在项目上遇到了批量插入的场景问题,由于每次需要插入超过 10w 的数据量并且字段也蛮多的导致如果使用循环单次插入的方式插入数据插入的效率不高。相信读者们在实际开发中也遇到过这样类似的场景,那么批量插入如何实现呢? 其实我也…

分寝室

L1-7 分寝室 分数 20 作者 陈越 单位 浙江大学 学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女生 n0​ 位、男生 n1​ 位。所有待分配…

Vue使用svg图片-svg-sprite-loader插件

需求:设计给的一个按钮图标是svg的,不是element自带的图标使用插件svg-sprite-loader svg-sprite-loader 什么是svg-sprite-loader? 将多个 svg 打包成 svg-sprite。svg 雪碧图。类似于 CSS 中的 Sprite 技术。图标图形整合在 一起&#xf…

爆火《幻兽帕鲁》被指用AI缝合宝可梦,开发者自曝传奇经历:是人类的奇迹

梦晨 克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 4天卖出600万份,爆火游戏《幻兽帕鲁》最高180万人同时在线,直接登顶。 这个成绩,甚至在整个Steam游戏平台历史上也能排到第二,连平台自家王牌CS2都被挤下去了。 同时&#xff0…

NGINX如何实现rtmp推流服务

最近直播大火,直播推流软件遍地开花,那么用NGINX如何进行推流呢?下面我们就简单的介绍一下用NGINX的rtmp模块如何实现视频推流,我们主要从一下几点介绍: 推流拉流推流认证拉流认证 package mainimport ("fmt&qu…

[MQ]常用的mq产品图形管理web界面或客户端

一、MQ介绍 1.1 定义 MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。 如果非要用一个定义来概括只能是抽象出来一些概念,概括为跨服务之间传递信息的软件。 1.2 MQ产品 较为成熟的MQ产品:IBMMQ(IBM We…

公司内网虚拟机中穿透服务器Coturn的搭建

1. 写在前面 coturn服务器的搭建文章已经非常多,但是对于对linux不熟悉的人来说排查错误的文章不多,此篇文章把我这次搭建过程以及如何排查问题做一个梳理我这里是在oracle vm虚拟机中搭建安装的ubuntu,通过H3C路由器映射到外网以下介绍我只…

SpringBoot的默认组件扫描

本篇博客主要探究:为什么SpringBoot项目中我们没有配置组件扫描的包,为什么它会默认扫描启动类所在的包? 一、访问与启动类所在同一包下的接口 我们先来看一个简单的接口: 我们可以观察到,HelloController这个类处在…

Linux中LVM实验

LVM实验: 1、分区 -L是大小的意思-n名称的意思 从vg0(卷组)分出来 2、格式化LV逻辑卷 LVM扩容 如果icdir空间不够了, 扩展空间lvextend -L 5G /dev/vg0/lv1 /dev/vg0/lv1(pp,vg,lv) 刷新文件系统xfs_growfs /lvdir VG扩容 …

阿里云快速搭建《幻兽帕鲁》服务器自建指南

如何自建幻兽帕鲁服务器?基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了,一看就懂系列。本文是利用OOS中幻兽帕鲁扩展程序来一键部署幻兽帕鲁服务器,阿里云百科aliyunbaike.com分享官方基于阿里云服务器快速创建幻兽帕鲁服务器教程&…

【华为云-云驻共创】数据高速公路—数仓集群通信技术详解

【摘要】本文讲解GaussDB(DWS)集群通信技术如何在大规模集群中承载高并发业务,如何实现高性能分布式通信系统。主要讲述客户端、CN、DN三类进程间的通信原理和流程,分为CN通信框架和DN间通信框架。 数据仓库服务GaussDB&#xff0…

伊恩·斯图尔特《改变世界的17个方程》薛定谔方程笔记

想法是等这学期学到薛定谔方程后再把整份完善下。 它告诉我们什么? 这个方程不是把物质作为粒子,而是作为波,并描述这样的波如何传播。 为什么重要? 薛定谔方程是量子力学的基础,它与广义相对论一起构成了当今最有效的…

【CKA认证考试参考题库及万字详解】

目录 【CKA认证考试参考题库及详解】说明题库总结第1题:节点排障1. 分值权重:13%2. 考题内容2.1 设置配置环境2.2 Context2.3 Task 3. 考点解析4. 考点参考链接5. 操作命令和结果5.1 必背操作命令5.2 详细操作步骤和结果 6. 验证命令和结果 第2题&#x…

近期孩子燃放烟花已引发多起火灾 富维图像烟火识别来揭秘

家长们,请注意!最近有报道称,孩子们燃放烟花引发了多起火灾。 相关案例1 1月4日,浙江嘉兴海盐武原街道一小区内一名12岁的男孩在楼下燃放烟花,只见烟花点着后,突然“腾空而起”飞入五楼住户的阳台。所幸扑…

【doghead】2: 数据产生及pacing发送

默认采用fake的数据生产者 FakeDataProducer也可以读取h264文件生成:H264FileDataProducerUSE_FAKE_DATA_PRODUCER G:\CDN\BWE-DEV\Bifrost\worker\src\bifrost\bifrost_send_algorithm\bifrost_pacer.cpp FakeDataProducer 生产制造rtp包 ExperimentDumpData : 可用带宽、发…

Jellyfin影音服务本地部署并结合内网穿透实现公网访问本地资源

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…