一種通過模板輸出Docx的方法

起因

在2個群里都有網友討論這個問題,俺就寫了一個最簡單的例子。其實,我們經常遇到一些Docx的輸出的需求,“用模板文件進行處理”是最簡單的一個方法,如果想預覽也簡單 DevExpress 、Teleric 都可以,而且也支持 Web 、Winform。啥平臺的 移動動也沒有關系,也無需環境。

模板

?下面是模板文件,需要替換的內容是紅色部分

處理后的Docx

分析

這個例子中有3種處理方式:

  • 普通的文本替換
  • 文本替換為內容控件
  • 選擇框的處理

主角? documentServer? 先?LoadDocument

RichEditDocumentServer documentServer = new RichEditDocumentServer();

documentServer.LoadDocument("反饋表.docx", DevExpress.XtraRichEdit.DocumentFormat.OpenXml);

普通的文本替換

這種最簡單,我為了演示 ,特意加了字體的處理,因為不加字體處理,代碼就一行了。Document.Replace(range, txt2)?

調用:

? ? ? ? ? ? replace_txt(documentServer, "[培訓的主辦單位]", "微軟MVP");
replace_txt(documentServer, "[培訓講師]", "月巴月巴白勺合鳥月半");

處理:

? ? ? ? private void replace_txt(RichEditDocumentServer documentServer ,string txt1 ,string txt2)
{
DocumentRange[] ranges = documentServer.Document.FindAll(txt1, SearchOptions.None); ? ? ? ? ? ?
for (int i = ranges.Length - 1; i >= 0; i--)
{
DocumentRange range = ranges[i];
documentServer.Document.Replace(range, txt2);
CharacterProperties cp = documentServer.Document.BeginUpdateCharacters(range);
{
cp.Bold = true;
cp.FontName = "SimHei"; // 黑體
cp.ForeColor = Color.Red;
}
documentServer.Document.EndUpdateCharacters(cp);
}
}

文本替換為內容控件

這里我用了一個下拉框進行演示(彩蛋 :你還記得下拉框中的那句話嗎?)

調用:

?replace_txt_drop(documentServer, "[受訓人員]", "張三",new string[] { "張三", "李四", "傳說結束了","歷史才剛剛開始" });

處理:

? ? ? ? private void replace_txt_drop(RichEditDocumentServer documentServer, string txt1, string txt2, string[] items)
{
DocumentRange[] ranges = documentServer.Document.FindAll(txt1, SearchOptions.None);
for (int i = ranges.Length - 1; i >= 0; i--)
{
DocumentRange range = ranges[i];
documentServer.Document.Delete(range);
ContentControlComboBox dropdown = documentServer.Document.ContentControls.InsertComboBoxControl(range.Start); ? ? ? ? ? ? ? ?
foreach (string s in items)
{
dropdown.AddItem(s, s);
}?
dropdown.SetText(txt2);
}
}

選擇框的處理

其實這就是個文本替換,和前面一樣,唯一的不同就是用了書簽。

調用:

?replace_bookmark(documentServer, "check3");

處理:

? ? ? ? private void replace_bookmark(RichEditDocumentServer documentServer, string bookmarkName)
{
BookmarkCollection Bookmarks = documentServer.Document.Bookmarks;?
if (Bookmarks[bookmarkName]!=null)
{
// 獲取書簽
Bookmark bookmark = Bookmarks[bookmarkName];
DocumentRange range = bookmark.Range;
// 替換書簽內容
documentServer.Document.Replace(bookmark.Range, "R");
CharacterProperties cp = documentServer.Document.BeginUpdateCharacters(range);
{?
cp.FontName = "Wingdings 2"; ?
}
documentServer.Document.EndUpdateCharacters(cp);
}
}

代碼

       private void porc_replace(string filepath1 ,string filepath2){RichEditDocumentServer documentServer = new RichEditDocumentServer();documentServer.Options.FormattingMarkVisibility.ParagraphMark = DevExpress.XtraRichEdit.RichEditFormattingMarkVisibility.Visible;documentServer.Options.FormattingMarkVisibility.HiddenText = DevExpress.XtraRichEdit.RichEditFormattingMarkVisibility.Visible;documentServer.LoadDocument(filepath1, DevExpress.XtraRichEdit.DocumentFormat.OpenXml);documentServer.Options.FormattingMarkVisibility.ParagraphMark = DevExpress.XtraRichEdit.RichEditFormattingMarkVisibility.Visible;documentServer.Options.FormattingMarkVisibility.HiddenText = DevExpress.XtraRichEdit.RichEditFormattingMarkVisibility.Visible;replace_txt(documentServer, "[培訓的主辦單位]", "微軟MVP");replace_txt(documentServer, "[培訓講師]", "月巴月巴白勺合鳥月半");replace_txt_drop(documentServer, "[受訓人員]", "張三",new string[] { "張三", "李四", "傳說結束了","歷史才剛剛開始" });replace_bookmark(documentServer, "check3");documentServer.SaveDocument(filepath2, DevExpress.XtraRichEdit.DocumentFormat.OpenXml); documentServer.Dispose();}private void replace_bookmark(RichEditDocumentServer documentServer, string bookmarkName){BookmarkCollection Bookmarks = documentServer.Document.Bookmarks; if (Bookmarks[bookmarkName]!=null){// 獲取書簽Bookmark bookmark = Bookmarks[bookmarkName];DocumentRange range = bookmark.Range;// 替換書簽內容documentServer.Document.Replace(bookmark.Range, "R");CharacterProperties cp = documentServer.Document.BeginUpdateCharacters(range);{ cp.FontName = "Wingdings 2";  }documentServer.Document.EndUpdateCharacters(cp);}}private void replace_txt_drop(RichEditDocumentServer documentServer, string txt1, string txt2, string[] items){DocumentRange[] ranges = documentServer.Document.FindAll(txt1, SearchOptions.None);for (int i = ranges.Length - 1; i >= 0; i--){DocumentRange range = ranges[i];documentServer.Document.Delete(range);ContentControlComboBox dropdown = documentServer.Document.ContentControls.InsertComboBoxControl(range.Start);                foreach (string s in items){dropdown.AddItem(s, s);} dropdown.SetText(txt2);}}private void replace_txt(RichEditDocumentServer documentServer ,string txt1 ,string txt2){DocumentRange[] ranges = documentServer.Document.FindAll(txt1, SearchOptions.None);            for (int i = ranges.Length - 1; i >= 0; i--){DocumentRange range = ranges[i];documentServer.Document.Replace(range, txt2);CharacterProperties cp = documentServer.Document.BeginUpdateCharacters(range);{cp.Bold = true;cp.FontName = "SimHei"; // 黑體cp.ForeColor = Color.Red;}documentServer.Document.EndUpdateCharacters(cp);}}private void button1_Click(object sender, EventArgs e){porc_replace("反饋表.docx", "反饋表替換后.docx");}

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

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

相關文章

探索 List 的奧秘:自己動手寫一個 STL List?

📖引言大家好!今天我們要一起來揭開 C 中 list 容器的神秘面紗——不是直接用 STL,而是親手實現一個簡化版的 list!🎉你是不是曾經好奇過:list 是怎么做到高效插入和刪除的?🔍迭代器…

mysql占用高內存排查與解決

mysql占用高內存排查-- 查看當前全局內存使用情況(需要啟用 performance_schema) SELECT * FROM sys.memory_global_total; -- 查看總內存使用 SELECT * FROM sys.memory_global_by_current_bytes LIMIT 10; -- 按模塊分類查看內存使用排行memory/perfor…

構建真正自動化知識工作的AI代理

引言:新一代生產力范式的黎明 自動化知識工作的人工智能代理(AI Agent),或稱“智能體”,正迅速從理論構想演變為重塑各行各業生產力的核心引擎。這些AI代理被定義為能夠感知環境、進行自主決策、動態規劃、調用工具并持…

青少年機器人技術(四級)等級考試試卷-實操題(2021年12月)

更多內容和歷年真題請查看網站:【試卷中心 -----> 電子學會 ----> 機器人技術 ----> 四級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 青少年機器人技術(四級)等級考試試卷-實操題(2021年12月) …

最新短網址源碼,防封。支持直連、跳轉。 會員無廣

最新短網址源碼,防封。支持直連、跳轉。 會員無廣告1.可將長網址自動縮短為短網址,方便記憶和使用。2.短網址默認為臨時有效,可付費升級為永久有效,接入支付后可自動完成,無需人工操作。3.系統支持設置圖片/文字/跳轉頁…

緩存-變更事件捕捉、更新策略、本地緩存和熱key問題

緩存-基礎知識 熟悉計算機基礎的同學們都知道,服務的存儲大多是多層級的,呈現金字塔類型。通常來說本機存儲比通過網絡通信的外部存儲更快(現在也不一定了,因為網絡傳輸速度很快,至少可以比一些過時的本地存儲設備速度…

報表工具DevExpress .NET Reports v25.1新版本亮點:AI驅動的擴展

DevExpress Reporting是.NET Framework下功能完善的報表平臺,它附帶了易于使用的Visual Studio報表設計器和豐富的報表控件集,包括數據透視表、圖表,因此您可以構建無與倫比、信息清晰的報表。 DevExpress Reporting控件日前正式發布了v25.1…

kubernetes中pod的管理及優化

目錄 2 資源管理方式 2.1 命令式對象管理 2.2 資源類型 2.2.1 常用的資源類型 2.2.2 kubectl常見命令操作 2.3 基本命令示例 2.4 運行和調試命令示例 2.5 高級命令示例 3 pod簡介 3.1 創建自主式pod(生產環境不推薦) 3.1.1 優缺點 3.1.2 創建…

解釋一下,Linux,shell,Vmware,Ubuntu,以及Linux命令和shell命令的區別

Linux 操作系統概述Linux 是一種開源的類 Unix 操作系統內核,由 Linus Torvalds 于 1991 年首次發布。作為現代計算的基礎設施之一,它具有以下核心特征:多用戶多任務特性允許多個用戶同時操作系統資源,而模塊化設計使其能夠適應從…

Windows 系統中,添加打印機主要有以下幾種方式

在 Windows 系統中,添加打印機主要有以下幾種方式,我將從最簡單到最復雜為您詳細介紹。 方法一:自動安裝(推薦首選) 這是 Windows 10 和 Windows 11 中最簡單、最現代的方法。系統會自動搜索網絡(包括無線和有線網絡)上可用的打印機并安裝驅動程序。 操作步驟: 進入…

Mixture of Experts Guided by Gaussian Splatters Matters

Mixture of Experts Guided by Gaussian Splatters Matters: A new Approach to Weakly-Supervised Video Anomaly Detection ICCV2025 https://arxiv.org/pdf/2508.06318 https://github.com/snehashismajhi/GS-MoEAbstract 視頻異常檢測(VAD)是一項具有…

SeaTunnel Databend Sink Connector CDC 功能實現詳解

Databend 是一個面向分析型工作負載優化的 OLAP 數據庫,采用列式存儲架構。在處理 CDC(Change Data Capture,變更數據捕獲)場景時,如果直接執行單條的 UPDATE 和 DELETE 操作,會嚴重影響性能,無…

算法230. 二叉搜索樹中第 K 小的元素

題目:給定一個二叉搜索樹的根節點 root ,和一個整數 k ,請你設計一個算法查找其中第 k 小的元素(從 1 開始計數)。示例 1:輸入:root [3,1,4,null,2], k 1 輸出:1 示例 2&#xff1…

Seaborn數據可視化實戰:Seaborn多變量圖表繪制高級教程

Seaborn多變量圖表實戰:從數據到洞察 學習目標 本課程將帶領學員深入了解Seaborn庫中用于繪制多變量圖表的高級功能,包括聯合圖(Joint Plot)、對角線圖(Pair Plot)等。通過本課程的學習,學員將能…

【數智化人物展】首衡科技CTO李蒙:算法會過時,數據會貶值,只有系統智能才具未來性

李蒙本文由首衡科技CTO李蒙投遞并參與由數智猿數據猿上海大數據聯盟共同推出的《2025中國數智化轉型升級先鋒人物》榜單/獎項評選。大數據產業創新服務媒體——聚焦數據 改變商業“算法會過時,數據會貶值。”當我第一次在內部戰略會上拋出這句話時,現場…

word——將其中一頁變成橫向

在word中如何將其中一頁變成橫向? 在需要橫向的這一頁和上一頁插入分節符(連續) 1.點擊布局→分隔符→分節符(連續) 2.在所需要橫向頁將紙張方向改為橫向即可。

使用WORD實現論文格式的樣式化制作【標題樣式、自動序列、頁號(分節)、自動目錄(修改字體類型)】

背景 每家院校對論文的格式都有一系列的特定要求,相應的會有一份格式標準的說明文檔,該說明文檔中會羅列對文檔各個項的格式標準要求(例如:題目、1級標題、2級標題、頁號、每個級別的字體字號,行距,段前段…

分享一個免費開源的網站跟蹤分析工具Open-Web-Analytics(和GoogleAnalytics一樣)

做獨立網站的福音,這個是免費開源的,可增改性強。 開源地址:https://github.com/Open-Web-Analytics/Open-Web-Analytics 下載源碼包 接著下載PHP工具:我用XP小皮 phpstudy_pro 地址:phpStudy - Windows 一鍵部署 …

Maxscript如何清理3dMax場景?

在3ds Max的創作過程中,隨著項目的推進,場景往往會積累許多冗余元素,如孤立幫助對象、隱藏對象以及空層等,它們不僅讓場景顯得雜亂無章,還會占用資源、降低視口性能,影響工作效率。別擔心,在本教程中,我們將為大家帶來實用妙招——通過簡單的Maxscript腳本片段,快速清…

JavaScript 性能優化實戰:從分析到落地的全指南

一、引言:為什么 JS 性能優化至關重要?用戶體驗的直接影響:加載慢、交互卡頓如何流失用戶(引用 Google 研究:頁面加載延遲 1 秒,轉化率下降 7%)業務價值關聯:性能優化對 SEO、留存率…