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

news2024/10/6 12:27:38

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


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

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

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

相关文章

LLM之RAG实战(二十一)| 使用LlamaIndex的Text2SQL和RAG的功能分析产品评论

亚马逊和沃尔玛等电子商务平台上每天都有大量的产品评论,这些评论是反映消费者对产品情绪的关键接触点。但是,企业如何从庞大的数据库获得有意义的见解? 我们可以使用LlamaIndex将SQL与RAG(Retrieval Augmented Generation&#x…

Linux--基础开发工具篇(1)(yum)

1.Linux 软件包管理器 yum 1.1yum是什么?什么是软件包? yum是什么? yum是一个软件下载安装管理的一个客户端,就如小米应用商店,华为应用商城。 Linux中软件包可能有依赖关系--yum会帮助我们解决依赖关系的问题。 什么是…

eNSP学习——利用单臂路由实现VLAN间路由

目录 原理概述 实验内容 实验目的 实验步骤 实验拓扑 实验编址 配置步骤 创建VLAN并配置Access、Trunk接口 配置路由器子接口和IP地址 配置路由器子接口封装VLAN 测试结果 原理概述 在以太网中,通常会使用VLAN技术隔离二层广播域来减少广播的影响&#…

MacOS平台翻译OCR软件,双管齐下,还可自定义插件,为其添砖加瓦!

小编昨天为大家分享了Windows系统下的一款功能强大且免费的 OCR 开源工具 Umi-OCR。 今天则为大家推荐一款 MacOS系统下的一款 翻译 OCR 多功能双管齐下的桌面应用软件 Bob。这款软件虽然也上线了GitHub,但它不是一款开源软件,仓库只是作者为了用户反馈…

【C/C++】C/C++编程——第一个 C++ 程序:HelloWorld

第一个 C 程序:HelloWorld 大家好,我是 shopeeai,也可以叫我虾皮,中科大菜鸟研究生。昨天我们成功搭建好了 C 的开发环境,今天我们来介绍一下第一个 C 程序,打印一个"hello world"。首先我们先贴一下示例代…

从零实现一套低代码(保姆级教程)【后端服务】 --- 【21】实现数据库的动态建表等接口

摘要 在前面的两篇文章,我们主要是通过Upload组件和Image组件,真正的做到了设计器和后端服务之间的数据传递。 有了这个例子,应该比较清楚,对于低代码项目的服务端,它主要做的是一个抽象的数据存储。 因为正常做开发…

Tomcat运维

目录 一、Tomcat简介 二、系统环境说明 1、关闭防火墙,selinux 2、安装JDK 3、安装Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2、webapps目录介绍 3、Tomcat配置介绍(conf) 4、Tomcat的管理 四、Tomcat 配置管理页面(了解) …

分享 7 个最佳短信恢复应用程序,帮助恢复已删除短信

对于 Android 用户来说,丢失重要短信可能是一种令人沮丧的经历。幸运的是,有许多短信恢复应用程序可以帮助恢复丢失或删除的短信。在本文中,我们将与您分享 7 个最佳短信恢复应用程序,并帮助您找到可用于恢复已删除消息的最佳应用…

新能源+储能新模式 新创新

新型储能技术的兴起主要原因是:187.210.98.782 能源需求增长:随着全球人口和经济的增长,对能源的需求量也在不断上升,传统的化石燃料资源日益减少,因此需要开发新型的可再生能源和储能技术。 环境保护要求&#xff1a…

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

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

股票交易维度和概念

股票:股份公司为筹集资金而发行给各个股东作为持股凭证并借以取得股息和红利的一种有价证券 好处:分红、送股配股、交易收益、本金少、易变现、避免货币贬值 金融标的投资风险与收益 股票分类 蓝筹股 经营业绩长期稳定增长的大公司,一般是…

数据分析 - python 数据处理

数据处理 去除重复数据 # 删除重复值 保留重复行 第一行的数据 data.drop_duplicates(inplaceTrue, keepfirst)数据格式转化 日期格式化 data[order_date] pd.to_datetime(data[order_dt], format%Y%m%d)data[销售时间] pd.to_datetime(data[销售时间]) # 交货时间 销售…

Apache Shiro 安全框架

前言 Apache Shiro 是一个强大且容易使用的Java安全矿建,执行身份验证,授权,密码和会话管理。使用Shiro的易于理解的API您可以快速轻松的获得任何应用程序直到大的项目。 一丶什么是Shiro 1.Shiro是什么 Apache Shiro是一个强大且易于使用…

RabbitMQ简单模式和工作模式

RabbitMQ 是一个消息队列中间件,用于在分布式系统中进行消息传递。在 RabbitMQ 中,有几种工作模式,其中简单模式和工作模式是其中两种基本的模式之一。 简单模式(Simple Mode): 在简单模式中,有…

找不到d3dx9_43.dll怎么办?有什么方法能解决这个问题

d3dx9_43.dll 是一个与 Microsoft DirectX 9.0c 版本相关的动态链接库(DLL)文件。DirectX 是由微软开发的一个应用程序接口(API),用于处理多媒体相关任务,尤其是在游戏和高性能图形应用中。具体到 d3dx9_43…

我的隐私计算学习——联邦学习(5)

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具,经由自己阅读后整理而成。 (七)联邦迁移学习 ​ 相关研究表明,联邦迁移学习不需要主服务器作为各参与方间的协调者,旨在让模型具备举一反三能力,在…

C++ 11 多线程库初步学习

在C11标准中&#xff0c;可以简单通过使用thread库&#xff0c;来管理多线程。 thread库可以看做对不同平台多线程API的一层包装&#xff1b;因此使用新标准提供的线程库编写的程序是跨平台的。 使用时需要#include <thread>头文件&#xff1b; #include <iostream&g…

【SpringCloud Nacos】 微服务治理介绍及Nacos引入初体验

文章目录 前言服务治理介绍什么是服务治理1、服务发现2、服务配置3、服务健康检测 常见的注册中心ZookeeperEurekaConsulNacos Nacos 简介Nacos 实战入门搭建nacos环境1、安装nacos2、配置nacos3、访问nacos 将商品微服务注册到 nacos1、在 pom. xml 中添加 nacos 的依赖2、在主…

Pycharm2023.3.2使用conda创建工程

1 conda环境 举个例子&#xff0c;创建一个环境&#xff0c;名叫Pytorch&#xff0c;使用的python版本是3.7 &#xff08;1&#xff09;创建环境 conda create -n Pytorch python3.7&#xff08;2&#xff09;激活环境 conda activate Pytorch&#xff08;3&#xff09;查看…

小型商用机器人,如何做到小而强?

兼顾体型和性能。 体型和性能的矛盾 一直以来&#xff0c;商用清洁机器人的应用场景主要集中在大型商场、超市、写字楼等&#xff0c;为什么1000平米以下的小型商超等中小场景却很少涉足&#xff1f;原因可以说有很多&#xff0c;但核心为两方面&#xff0c;一方面&#xff0…