C# 导出word 插入公式问题

最近遇到了一个问题,下载一个文档时需要下载word可编辑的公式。找了很久终于找到了一种解决办法。下面是以C#代码来实现在Word中插入公式的功能。

目录

  • 一、引入dll程序集文件
    • 1、通过 NuGet 引入dll(2种方法)的方法:
    • 2、手动添加dll引用的方法
  • 二、插入公式
  • 三、如何查找并替换公式
    • latex公式提取器
    • 查找并进行公式替换

一、引入dll程序集文件

1、通过 NuGet 引入dll(2种方法)的方法:

  1. 可以在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”,然后搜索“Free Spire.Doc”,点击“安装”。等待程序安装完成。
    在这里插入图片描述

  2. 将以下内容复制到PM控制台安装:

      Install-Package FreeSpire.Doc -Version 10.2
    

2、手动添加dll引用的方法

可通过手动下载包到本地,然后解压,找到BIN文件夹下的Spire.Doc.dll。然后在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径BIN文件夹下的dll文件添加引用至程序。

二、插入公式

在编辑公式时,通过 OfficeMath.FromLatexMathCode() 方法和 OfficeMath.FromMathMLCode()方法来添加LaTeX公式及MathML公式。开发者可根据程序设计需要选择其中对应的方法来编辑公式即可。

下面是本次程序代码实现公式添加的主要代码步骤:

  1. 创建 Document类的对象,并调用 Document.AddSection()方法添加节到Word文档。
  2. 通过 Section.AddParagraph()方法添加段落。
  3. 初始化 OfficeMath类的实例。通过 OfficeMath.FromLatexMathCode(string latexMathCode)方法编辑LeTeX公式;通过 OfficeMath.FromMathMLCode(string mathMLCode)方法编辑MathML公式。
  4. 通过 DocumentObjectCollection.Add(Spire.Doc.Interface.IDocumentObject entity)方法添加公式到段落。
  5. 最后,通过 Document.SaveToFile(string fileName, FileFormat fileFormat)方法保存文档。
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields.OMath;namespace InsertFormula
{class Program{static void Main(string[] args){//新建word实例Document doc = new Document();//添加一个sectionSection section = doc.AddSection();//添加一个段落 Paragraph paragraph = section.AddParagraph();//在第一段添加Latex公式OfficeMath officeMath = new OfficeMath(doc);officeMath.FromLatexMathCode("x^{2}+\\sqrt{x^{2}+1}=2");paragraph.Items.Add(officeMath);//添加MathML公式到第四段Paragraph paragraph1 = section.AddParagraph();OfficeMath officeMath1 = new OfficeMath(doc);            officeMath1.FromMathMLCode("<mml:math xmlns:mml=\"http://www.w3.org/1998/Math/MathML\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"><mml:msup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>+</mml:mo><mml:msqrt><mml:msup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:msqrt><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:math>");paragraph1.Items.Add(officeMath1);//这里可以进行自己的操作添加数据。。。//保存文档       doc.SaveToFile("InsertFormulas.docx", FileFormat.Docx);}}
}

结果:
在这里插入图片描述

三、如何查找并替换公式

有时候我们并不是直接插入公式,公式存在于文本值中,这个时候我们就需要在文本中替换公式部分。
结果如下:
在这里插入图片描述

latex公式提取器

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace TEST;/// <summary>
/// Latex公式提取器
/// </summary>
public class LatexFormulaExtractor
{// 正则表达式模式组合:匹配所有可能的 LaTeX 公式形式private static readonly Regex LaTeXPattern = new Regex(// 匹配 LaTeX 环境(如 \begin{equation}...\end{equation})@"\\begin\{([a-zA-Z]+\*?)\}.*?\\end\{\1\}" + "|" +// 匹配 $$...$$ 或 \[...\]@"\${2}(.*?)\${2}|\\\[(.*?)\\\]" + "|" +// 匹配 $...$(需排除转义的 \$)@"(?<!\\)\$((?:[^$\\]|\\.)*?)(?<!\\)\$",RegexOptions.Singleline | RegexOptions.IgnoreCase);/// <summary>/// 从文本中提取所有 LaTeX 公式/// </summary>public static List<string> ExtractLatexFormulas(string input){var formulas = new List<string>();if (string.IsNullOrWhiteSpace(input)) return formulas;// 遍历所有匹配项foreach (Match match in LaTeXPattern.Matches(input)){if (match.Success){// 提取匹配的公式内容(处理不同捕获组)string formula = match.Groups[0].Value;formulas.Add(formula);}}return formulas;}
}

查找并进行公式替换

 var formulas = LatexFormulaExtractor.ExtractLatexFormulas(htmlContent);foreach (var formula in formulas){// 添加Office Math公式OfficeMath math = new OfficeMath(doc);// 确保OfficeMath对象正确初始化if (math != null){math.FromLatexMathCode(formula); // 使用LaTeX语法插入公式}//查找文档中的指定文本内容TextSelection[] selections = doc.FindAllString(@formula, true, true);int tindex = 0;TextRange range = null;//遍历文档,移除文本内容,插入公式if (selections != null){foreach (TextSelection selection in selections){range = selection.GetAsOneRange();tindex = range.OwnerParagraph.ChildObjects.IndexOf(range);range.OwnerParagraph.ChildObjects.Insert(tindex, math);range.OwnerParagraph.ChildObjects.Remove(range);}}}

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

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

相关文章

智汇云舟携最新无人机2D地图快速重建技术亮相广西国际矿业展览会

5月22至25日&#xff0c;广西国际矿业展览会&#xff08;以下简称 “矿业展”&#xff09;在南宁国际会展中心成功举办。智汇云舟与合作伙伴广西空驭数智信息技术有限公司携无人机 2D地图快速重建技术&#xff0c;以及视频孪生智慧矿山解决方案参会&#xff0c;为矿山行业数字化…

OpenSSL 签名验证详解:PKCS7* p7、cafile 与 RSA 验签实现

OpenSSL 签名验证详解&#xff1a;PKCS7* p7、cafile 与 RSA 验签实现 摘要 本文深入剖析 OpenSSL 中 PKCS7* p7 数据结构和 cafile 的作用及相互关系&#xff0c;详细讲解基于 OpenSSL 的 RSA 验签字符串的 C 语言实现&#xff0c;涵盖签名解析、证书加载、验证流程及关键要…

9:OpenCV—模板匹配

模版匹配 1、模板匹配概念 模板匹配是一项在一副图像中寻找与另一幅模板图像最匹配&#xff08;相似&#xff09;部分的技术。模板匹配不是基于直方图的&#xff0c;而是通过在输入图像上滑动图像块&#xff08;模板&#xff09;同时对比相似度&#xff0c;来对模板和输入图像…

Composer 常规操作说明与问题处理

目录 一、 Composer 简介&#xff0c;安装二、全局配置三、项目配置&#xff08;composer.json&#xff09;3.1 composer.json 文件1. 基础字段信息2. **require&#xff08;生产环境依赖&#xff09;**3. **require-dev&#xff08;开发环境依赖&#xff09;** 3.2 composer.l…

Spring Boot 3.0与Java 17:企业级应用开发的新范式

引言 随着Spring Boot 3.0和Java 17的正式发布&#xff0c;企业级应用开发迎来了新的技术范式。这两项技术的结合不仅带来了性能提升&#xff0c;还引入了众多现代化的编程特性&#xff0c;为开发者提供了更强大、更高效的开发体验。本文将深入探讨Spring Boot 3.0与Java 17的…

Vue 组件 - 指令

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue指令 目录 指令写法 自定义指令 简单封装指令 指令传递字符串 update事件 指令应用 指令实现轮播 指令函数简写 指令函数列表 bind inserted update componentUpdated unbind Vue3指令轮播 nextick 总结 指…

5.28 后端面经

为什么golang在并发环境下更有优势 Go语言&#xff08;Golang&#xff09;在并发环境下的优势主要源自其设计哲学和内置的并发机制&#xff0c;这些机制在语言层面提供了高效、简洁且安全的并发编程工具。以下是其核心优势的详细分析&#xff1a; 1. Goroutine&#xff1a;轻量…

Linux线程入门

目录 Linux线程概念 什么是线程 重新理解进程 线程的优点 线程的缺点 线程的异常 线程用途 Linux线程概念 什么是线程 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”。一切进程至…

通信应用高速模数转换器ADC

在5G通信、医疗成像、航空航天及工业自动化等关键领域&#xff0c;高速ADC模数转换器作为信号链的“心脏”&#xff0c;其性能直接决定了系统的精度与效率。然而&#xff0c;如何精确测试高速ADC的动态参数、优化设计验证流程、应对复杂应用场景的挑战&#xff0c;始终是工程师…

PostgreSQL 中 JSONB 数据类型的深度解析以及如何使用

一、JSONB 核心特性解析 1. 存储结构与优势 ​​二进制存储​​&#xff1a;将 JSON 数据解析为二进制格式&#xff08;分解键值对&#xff0c;去除空格和重复键&#xff09;​​高效查询​​&#xff1a;支持 GIN/GiST 索引&#xff0c;查询速度比 JSON 类型快 10 倍​​数据…

C++_核心编程_ 左移运算符重载 “<<” 左移运算符

作用&#xff1a;可以输出自定义数据类型 */ //目标 调用p1,输出Person 中的属性 m_A ,m_B &#xff1a; /* #### 4.5.2 左移运算符重载 “<<” 左移运算符 作用&#xff1a;可以输出自定义数据类型 *///目标 调用p1,输出Person 中的属性 m_A ,m_B &#xff1a; class…

thinkphp 5.1 部分知识记录<一>

1、配置基础 惯例配置->应用配置->模块配置->动态配置 惯例配置:核心框架内置的配置文件,无需更改。应用配置:每个应用的全局配置文件(框架安装后会生成初始的应用配置文件),有部分配置参数仅能在应用配置文件中设置。模块配置:每个模块的配置文件(相同的配置…

数据结构 -- 树相关面试题

二、树相关的填空题 1.对于一个具有 n 个结点的二叉树&#xff0c;当它为一棵 ________ 二叉树时&#xff0c;具有最小高度&#xff0c;即为 ________&#xff1b;当它为一棵单支树时具有最大高度&#xff0c;即为 ________。 2.对于一个具有 n 个结点的二叉树&#xff0c;当它…

2025河北CCPC 题解(部分)

签到题&#xff1a;AC代码如下 &#xff1a; // Problem: H - What is all you need? // Contest: Virtual Judge - sdccpc20250526 // URL: https://vjudge.net/contest/718568#problem/H // Memory Limit: 1024 MB // Time Limit: 1000 ms // // Powered by CP Editor (ht…

计算机视觉---YOLOv4

YOLOv4&#xff08;You Only Look Once v4&#xff09;于2020年由Alexey Bochkovskiy等人提出&#xff0c;是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术&#xff0c;实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练…

OpenCV 第7课 图像处理之平滑(一)

1. 图像噪声 在采集、处理和传输过程中,数字图像可能会受到不同噪声的干扰,从而导致图像质量降低、图像变得模糊、图像特征被淹没,而图像平滑处理就是通过除去噪声来达到图像增强的目的。常见的图像噪声有椒盐噪声、高斯噪声等。 1.1 椒盐噪声 椒盐噪声(Salt-and-pepper N…

Spring AI 系列3: Promt提示词

一、Promt提示词 Promt提示是引导 AI 模型生成特定输出的输入&#xff0c; 提示的设计和措辞会显著影响模型的响应。 在 Spring AI 中与 AI 模型交互的最低层级&#xff0c;处理提示有点类似于在 Spring MVC 中管理”视图”。 这涉及创建带有动态内容占位符的大段文本。 这些占…

随叫随到的电力补给:移动充电服务如何重塑用户体验?

在快节奏的现代生活中&#xff0c;电力已成为维系日常运转的隐形血脉。智能手机、电动汽车、便携设备的普及&#xff0c;让“电量焦虑”逐渐演变为一种时代症候。而移动充电服务的兴起&#xff0c;正悄然改变这一局面。它像一位隐形的能源管家&#xff0c;随时响应需求&#xf…

LeetCode 75. 颜色分类 - 双指针法高效解决(Java实现)

文章目录 问题描述算法思路&#xff1a;三指针分区法核心思想指针定义 Java实现算法执行流程关键问题解析&#xff1a;为什么交换0后不需要重新检查&#xff1f;交换0时的两种情况分析详细解释&#xff1a; 复杂度分析示例演示&#xff08;输入&#xff1a;[2,0,2,1,1,0]&#…

【MySQL】C语言连接

要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的库&#xff0c;大家可以去官网下载 我们使用C接口库来进行连接 要正确使用&#xff0c;我们需要做一些准备工作: 保证mysql服务有效在官网上下载合适自己平台的mysql connect库&#xff0c;以备后用 下载开发库 s…