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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82961.shtml
英文地址,請注明出處:http://en.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…