C#測試調用OpenXml操作word文檔的基本用法

??OpenXML SDK是微軟為高效處理Office文檔(如Word、Excel)而開發的開源.NET庫,它直接操作文檔內部的XML結構,無需安裝Office軟件即可實現文檔的創建、讀取和編輯,常用于服務器端批量生成報表、自動化文檔處理等場景,輕量且跨平臺。本文學習基于OpenXML SDK打開word文檔查找輸入框并插入內容、查找并復制表格的基本用法。
??VS2022創建控制臺程序,在Nuget包管理器中搜索并安裝DocumentFormat.OpenXml包。
在這里插入圖片描述
??使用DeepSeek生成帶封面和表格的兩頁文檔用于功能測試(實際上生成的是html文件,下載到本地后用word打開又另存為word),如下圖所示。
在這里插入圖片描述
??在word軟件的選項中啟用開發工具菜單,然后在開發工具菜單欄中使用屬性菜單設置封面中輸入框的標記,同時通過表格屬性設置表格的標題,以便后續通過程序能夠查找相應的內容。
在這里插入圖片描述
??OpenXML SDK中WordprocessingDocument類代表文檔對象,使用WordprocessingDocument.Open函數打開word文檔,該函數支持通過文件路徑或文件流形式打開文檔。
在這里插入圖片描述
??MainDocumentPart、Body、SdtElement 和Table 是處理 Word 文檔(.docx)的核心類,下表列出其簡要介紹和用途:

說明所在命名空間常用屬性/方法
MainDocumentPart代表 Word 文檔的主文檔部分,是操作文檔內容的入口點。DocumentFormat.OpenXml.PackagingDocument (獲取文檔對象), AddNewPart() (添加新部件), GetPartById(String) (通過ID獲取部件)
Body表示 Word 文檔的正文,是段落、表格等塊級元素的容器。DocumentFormat.OpenXml.WordprocessingAppendChild(OpenXmlElement) (添加子元素), Descendants() (獲取特定類型的后代元素), Elements() (獲取子元素)
SdtElement代表內容控件(Structured Document Tag),用于創建結構化、可重復使用的文檔區域或表單。DocumentFormat.OpenXml.WordprocessingDescendants(), SdtProperties (獲取內容控件的屬性), SdtContentBlock (獲取內容塊)
Table表示 Word 文檔中的一個表格,由行(TableRow)和單元格(TableCell)組成。DocumentFormat.OpenXml.WordprocessingAppendChild(TableRow), TableProperties (表格屬性), Descendants()

??基于上述類,打開word文檔并獲取正文對象的主要代碼如下:

Dictionary<string, string> dicTest = new Dictionary<string, string>();
dicTest.Add("filename", "測試文件名稱");
dicTest.Add("filecode", "test-file-code-001");
dicTest.Add("createtime", DateTime.Now.ToString());
dicTest.Add("dept", "測試部門");
dicTest.Add("editor", "tom");WordprocessingDocument doc = WordprocessingDocument.Open(fileStream, true);
MainDocumentPart mainPart = doc.MainDocumentPart;
Body body = mainPart.Document.Body;

??基于標記查找內容控件并輸入文本的主要代碼如下:

var contentControls = Body.Descendants<SdtElement>();foreach (var control in contentControls)
{// 獲取內容控件的標記var tag = control.Descendants<Tag>().FirstOrDefault()?.Val?.Value;if (tag != null && dicTest.ContainsKey(tag)){// 找到文本元素并替換內容var textElement = control.Descendants<Text>().FirstOrDefault();if (textElement != null){textElement.Text = dicTest[tag];}}
}

??查找并輔助表格的主要代碼如下所示:

Table targetTable = FindTableByTableTitle(body, tableTitle);
Table clonedTable = (Table)targetTable.CloneNode(true);
body.AppendChild(clonedTable );private static Table FindTableByTableTitle(Body body, string title)
{// 查找所有表格var tables = body.Descendants<Table>();foreach (var table in tables){// 獲取表格屬性var tableProperties = table.Elements<TableProperties>().FirstOrDefault();if (tableProperties != null){// 獲取表格標題var tableCaption = tableProperties.Elements<TableCaption>().FirstOrDefault();if (tableCaption != null && tableCaption.Val != null && tableCaption.Val.Value.Equals(title, StringComparison.OrdinalIgnoreCase)){return table;}}}return null;
}

??封面內容替換的程序運行效果如下所示,表格復制內容都是相同的,就不再重復截圖。
在這里插入圖片描述

參考文獻:
[1]https://github.com/dotnet/Open-XML-SDK
[2]https://learn.microsoft.com/zh-cn/office/open-xml/open-xml-sdk

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96632.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96632.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96632.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

照度傳感器考慮筆記

您好&#xff01;很高興為您解答關于照度計傳感器和設計的問題。這是一個非常專業且實際的話題。 一、照度計常用的照度傳感器類型 照度計的核心是光電探測器&#xff0c;其工作原理是將光信號轉換為電信號。目前主流的照度傳感器都屬于硅光電二極管&#xff08;Si Photodiode&…

C# Web API Mapster基本使用

安裝包&#xff1a;Mapster1.注冊MyRegister.Scan(); // 全局配置 //builder.Services.AddMapster(); // 需要安裝Mapster.DependencyInjection包 builder.Services.AddScoped<IMapper,Mapper>();2.配置&#xff08;可不進行配置直接使用也行&#xff09;public class My…

<數據集>無人機航拍人員搜救識別數據集<目標檢測>

數據集下載鏈接https://download.csdn.net/download/qq_53332949/91899456數據集格式&#xff1a;VOCYOLO格式 圖片數量&#xff1a;5755張 標注數量(xml文件個數)&#xff1a;5755 標注數量(txt文件個數)&#xff1a;5755 標注類別數&#xff1a;1 標注類別名稱&#xff…

STM32 開發(三十三)STM32F103 片內資源 —— 直接存儲 DMA 實戰 編碼詳解

??《上一篇》 ???《主目錄》 ???《下一篇》 文章目錄 一、基礎知識點 二、開發環境 三、STM32CubeMX相關配置 四、Vscode 代碼講解 ADC -DMA 采集溫度值 代碼解析 DAC -DMA 輸出 1KHZ 正弦波 代碼解析 五、結果演示 ADC -DMA 采集溫度值 結果演示 DAC -DMA 輸出 1KHZ 正…

Ip 地址,子網掩碼

1. 什么是 IP 地址&#xff1f;IP 地址是互聯網上設備的唯一標識&#xff0c;類似于現實中的“門牌號”&#xff0c;用于設備之間的通信。ABC類IP內網地址的范圍如下&#xff1a;A類地址&#xff1a;范圍是 10.0.0.0 到 10.255.255.255&#xff0c;用于大型網絡&#xff0c;網絡…

軟件工程領域內容運營的翻譯策略:打破語言邊界

軟件工程領域內容運營的翻譯策略:打破語言邊界 關鍵詞:軟件工程、內容運營、翻譯策略、技術本地化、術語管理、跨文化溝通、機器翻譯 摘要:在全球化協作日益緊密的今天,軟件工程領域的內容(如技術文檔、API手冊、開發者博客、開源社區指南等)早已突破單一語言限制,成為連…

元宇宙與金融創新:虛實融合下的金融服務新形態

1 元宇宙重構金融核心服務場景1.1 零售金融場景&#xff1a;從 “線下網點 線上 APP” 到 “沉浸式虛擬金融空間”傳統零售金融服務受限于物理網點或二維 APP&#xff0c;交互性與體驗感不足&#xff0c;元宇宙通過 “3D 虛擬金融空間 數字分身交互”&#xff0c;打造 “身臨…

信奧賽csp初賽高頻考點真題分類解析之:基本運算

信奧賽csp初賽高頻考點真題分類解析之:基本運算 ?題目1: 答案:C 題解:R進制轉換為十進制:按權展開 3 \times 8 1 ^1

PyTorch深度學習實戰【10】之神經網絡的損失函數

文章目錄零 回顧&#xff1a;機器學習中的模型訓練流程一 神經網絡的損失函數1.1 機器學習中的優化思想1.2 回歸&#xff1a;誤差平方和SSE1.3 二分類交叉熵損失的原理與實現1.3.1 極大似然估計求解二分類交叉熵損失1.3.2 實現二類交叉熵損失1.4 多分類交叉熵損失的原理與實現1…

人機協同中的層次映射關系研究:從自然語言處理到智能系統設計

一、引言&#xff1a;人機協同的層次化認知基礎人機協同作為人工智能領域的核心研究方向&#xff0c;正經歷從簡單工具使用到深度智能協作的范式轉變。在這一演進過程中&#xff0c;如何建立人類意圖與機器執行之間的有效映射關系成為關鍵挑戰。自然語言處理(NLP)領域中&#x…

2025主流大模型核心信息

2025主流大模型核心信息國際主流大模型1. GPT-5 (OpenAI)版本特性&#xff1a;多模態能力支持圖像、視頻、音頻的復雜理解與生成&#xff1b;超長上下文處理能力達1M tokens&#xff1b;推理能力接近專家水平優勢&#xff1a;綜合性能領先&#xff0c;編程能力強(SWE-bench Ver…

將容器連接到默認橋接網絡

1.列出當前已有的網絡[roothost1 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE db2f3a6af212 bridge bridge local 4251d9be020b host host local ba96ad98e029 none null local2.啟動兩個 ash &#xff08; Alpine 操作系…

安全審計-Ubuntu防火墻ufw

文章目錄 一、為什么運維需要使用防火墻? 二、Ubuntu 上常用的防火墻工具 三、UFW 常用命令及運維使用示例 1. 安裝 UFW(如果尚未安裝) 2. 查看防火墻狀態 3. 設置默認策略(強烈建議) 4. 允許必要服務(常見運維場景) ? 允許 SSH(遠程管理,最重要!) ? 允許 HTTP / …

iPhone 17系列包含哪些版本,各版本又有哪些配置,硬件、功能、性能、價格詳細介紹

文章目錄版本信息配置信息版本信息 iPhone 17系列提供了四個版本&#xff1a;iPhone 17 (標準版)、iPhone 17 Air、iPhone 17 Pro 和 iPhone 17 Pro Max。它們在設計、性能、影像等方面各有側重&#xff0c;下面是一個快速概覽表格&#xff0c;幫助你直觀了解它們的核心區別&a…

Go模塊自動導入教學文檔

目錄 概述核心概念實現原理項目結構代碼實現高級特性最佳實踐常見問題 概述 Go語言作為一門靜態類型語言&#xff0c;沒有像Python那樣的動態import機制。但是&#xff0c;我們可以通過設計模式和架構設計來實現"自動導入模塊"的功能。這種模式特別適合微服務架構…

深入解析Spring AOP核心原理

一 Spring-AOP1.對SpringAOP理解AOP是OOP的延續&#xff0c;是軟件開發中的一個熱點&#xff0c;也是Spring框架中的一個重要內容&#xff0c;是函數式編程的一種衍生泛型。利用AOP可以對業務邏輯的各個部分進行隔離&#xff0c;從而使得業務邏輯各部分之間的耦合度降低&#x…

大數據與AI:一場“數據盛宴”與“智能大腦”的奇妙邂逅

在當今這個信息爆炸的時代&#xff0c;大數據和AI&#xff08;人工智能&#xff09;就像一對熱戀中的情侶&#xff0c;天天黏在一起&#xff0c;形影不離。它們的結合&#xff0c;不僅改變了我們的生活方式&#xff0c;還讓這個世界變得更加有趣和奇妙。今天&#xff0c;就讓我…

解決window下共享資源報“不允許一個用戶使用一個以上用戶名與服務器或共享資源的多重連接“問題

問題現象&#xff1a; 使用不同samba共享賬號登錄同一服務器ip共享文件夾資源時會報錯誤提示解決辦法&#xff1a; 1.使用net use命令查看已保存的網絡連接 C:\Users\Administrator>net use 會記錄新的網絡連接。狀態 本地 遠程 網絡----…

SciKit-Learn 全面分析分類任務 wine 葡萄酒數據集

背景 wine 葡萄酒數據集&#xff0c;提供了對三種不同品種的意大利葡萄酒的化學分析結果 主要特點&#xff1a; 數據集規模&#xff1a;總共有 178 個樣本特征數量&#xff1a;每個樣本有 13 個化學特征&#xff0c;包括酒精、蘋果酸、灰分、鎂等類別數量&#xff1a;總共有 3 …

【論文閱讀】Far3D: Expanding the Horizon for Surround-view 3D Object Detection

標題&#xff1a; Far3D: Expanding the Horizon for Surround-view 3D Object Detection motivation 作者覺得市面上的方法對遠處的long-range 的3d-od檢測沒有深入研究&#xff0c;于是作者提出FAR3D. 基于環視圖像的3D物體檢測取得了顯著進展&#xff0c;且其部署成本較低。…