日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 替换Word文档中的书签内容【详细步骤】

發(fā)布時(shí)間:2023/12/14 C# 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 替换Word文档中的书签内容【详细步骤】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Word書簽不但可以幫助讀者快速跳轉(zhuǎn)到想要查看的位置,而且可以用做“占位符”,程序員獲取“占位符”之后,就可以更新這些“占位符”,即替換書簽內(nèi)容。替換模板文檔中的書簽內(nèi)容,可以幫助我們快速生成Word報(bào)表或文檔。

本文總結(jié)了一個(gè)將常見的Word文檔元素(文字、圖片和表格)替換進(jìn)書簽的C#解決方案,具體步驟見下文。

使用工具:

  • Spire.Doc.dll 6.4.5
  • ?Visual Studio 2013
步驟一 制作模板

1.??新建Word文檔


圖1?創(chuàng)建文檔

2.? 插入書簽


圖2?插入書簽

3.??保存模板,命名為“bookmark_template.docx”


圖3?保存模板文檔

步驟二 在項(xiàng)目中添加引用

1.??右鍵點(diǎn)擊“解決方案資源管理”中的“引用”,選擇“添加引用”


圖4 添加引用

2.??選擇要引用的Spire.Doc.dll文件,添加至項(xiàng)目中



圖5 引用Spire.Doc.dll

步驟三 編碼

Spire.Doc提供了BookmarksNavigator類來獲取和操作文檔中的書簽,但方法不是很直觀。為了方便,我自己封裝了Bookmark類,其中包括RepalceContent及其2個(gè)重載方法來分別應(yīng)對插入文字、圖片和表格三種情況。

  • public TextRange ReplaceContent(string bookmarkName, string text, bool saveFormatting)
  • public void ReplaceContent(string bookmarkName, string picPath, float widthScale, float heightScale, TextWrappingStyle wrapStyle, ShapeHorizontalAlignment horizontalAlignment)
  • public void ReplaceContent(string bookmarkName, Table table)

第一部分:Bookmark.cs編碼

using Spire.Doc; using Spire.Doc.Fields; using System.Drawing; using Spire.Doc.Interface; using Spire.Doc.Documents;namespace ReplaceBookmarkContent {class Bookmark{private Document doc = null;public Bookmark(Document document){doc = document;}/// <summary>/// 用文本替換指定書簽的內(nèi)容/// </summary>/// <param name="bookmarkName">書簽名</param>/// <param name="text">文本</param>/// <param name="saveFormatting">刪除原始書簽內(nèi)容時(shí),是否保留格式</param>/// <returns>TextRange</returns>public TextRange ReplaceContent(string bookmarkName, string text, bool saveFormatting){BookmarksNavigator navigator = new BookmarksNavigator(doc);navigator.MoveToBookmark(bookmarkName);//指向特定書簽navigator.DeleteBookmarkContent(saveFormatting);//刪除原有書簽內(nèi)容 Spire.Doc.Interface.ITextRange textRange = navigator.InsertText(text);//寫入文本return textRange as TextRange;}/// <summary>/// 用圖片替換指定書簽的內(nèi)容/// </summary>/// <param name="bookmarkName">書簽名</param>/// <param name="picPath">圖片路徑</param>/// <param name="widthScale">寬度縮放比例,0以上正整數(shù)</param>/// <param name="heightScale">高度縮放比例,0以上正整數(shù)</param>/// <param name="wrapStyle">環(huán)繞方式</param>/// <param name="horizontalAlignment"></param>public void ReplaceContent(string bookmarkName, string picPath, float widthScale, float heightScale, TextWrappingStyle wrapStyle, ShapeHorizontalAlignment horizontalAlignment){BookmarksNavigator navigator = new BookmarksNavigator(doc);navigator.MoveToBookmark(bookmarkName);navigator.DeleteBookmarkContent(false);IParagraphBase paragraphBase = navigator.InsertParagraphItem(ParagraphItemType.Picture);//插入類型為圖片Image image = Image.FromFile(picPath);//加載圖片DocPicture picture = paragraphBase.OwnerParagraph.AppendPicture(image);//插入圖片picture.WidthScale = widthScale;picture.HeightScale = heightScale;picture.TextWrappingStyle = wrapStyle;picture.HorizontalAlignment = horizontalAlignment;}/// <summary>/// 用表格替換指定書簽的內(nèi)容/// </summary>/// <param name="bookmarkName">書簽名</param>/// <param name="table">Table實(shí)例</param>public void ReplaceContent(string bookmarkName, Table table){BookmarksNavigator navigator = new BookmarksNavigator(doc);navigator.MoveToBookmark(bookmarkName);TextBodyPart body = new TextBodyPart(doc);body.BodyItems.Add(table);navigator.ReplaceBookmarkContent(body);}/// <summary>/// 創(chuàng)建表格并寫入數(shù)據(jù),返回Table對象/// </summary>/// <param name="rowsNum">行數(shù)</param>/// <param name="columnsNum">列數(shù)</param>/// <param name="columnWidth">列寬</param>/// <param name="horizontalAlignment">水平對齊方式</param>/// <param name="datatable">DataTable實(shí)例</param>/// <returns></returns>public Table CreateTable(int rowsNum, int columnsNum, float columnWidth, RowAlignment horizontalAlignment, System.Data.DataTable datatable){Table table = new Table(doc, true, 1f);//初始化Table對象table.ResetCells(rowsNum, columnsNum);//設(shè)置行數(shù)和列數(shù)//填充數(shù)據(jù)for (int i = 0; i < datatable.Rows.Count; i++){for (int j = 0; j < datatable.Columns.Count; j++){table.Rows[i].Cells[j].AddParagraph().AppendText(datatable.Rows[i][j].ToString());}}//設(shè)置列寬for (int i = 0; i < rowsNum; i++){for (int j = 0; j < columnsNum; j++){table.Rows[i].Cells[j].Width = columnWidth;} }table.TableFormat.HorizontalAlignment = horizontalAlignment;//表格水平對齊方式return table;}} }

第二步部分:生成文件的編碼

//加載模板文檔 Document doc = new Document(); doc.LoadFromFile(@"C:\Users\Administrator\Desktop\bookmark_template.docx");//初始化Bookmark對象 Bookmark bookmark = new Bookmark(doc);//用文本替換書簽bookmark_text的內(nèi)容 string text = "XXX科技股份有限公司成立于2010年12月,是一家致力于高新技術(shù)產(chǎn)品研發(fā)、生產(chǎn)、銷售的高科技股份制企業(yè),"+ "公司堅(jiān)持以技術(shù)創(chuàng)新為核心,以知識(shí)產(chǎn)權(quán)為基礎(chǔ),以人才戰(zhàn)略為支撐,經(jīng)過多年的礪練與發(fā)展,公司已逐步成以創(chuàng)新為引導(dǎo)的,"+ "產(chǎn)品具有競爭力,人才素質(zhì)優(yōu)良的新興科技企業(yè)。"; bookmark.ReplaceContent("bookmark_text", text, true);//用圖片替換書簽bookmark_picture的內(nèi)容 string picPath = @"C:\Users\Administrator\Desktop\company_logo.jpg"; bookmark.ReplaceContent("bookmark_picture", picPath, 80f, 80f, TextWrappingStyle.TopAndBottom, ShapeHorizontalAlignment.Center);//創(chuàng)建模擬數(shù)據(jù) DataTable dt = new DataTable(); dt.Columns.Add("employee_id", typeof(string)); dt.Columns.Add("name", typeof(string)); dt.Columns.Add("age", typeof(string)); dt.Columns.Add("sex", typeof(string)); dt.Columns.Add("title", typeof(string)); dt.Rows.Add(new string[] {"工號", "姓名", "年齡", "性別", "職位" }); dt.Rows.Add(new string[] {"1023","Nancy", "28", "女", "Java程序員" }); dt.Rows.Add(new string[] { "1024","James", "34", "男", ".NET程序員" }); dt.Rows.Add(new string[] { "1025","Kobe", "38", "男", "系統(tǒng)管理員" });//創(chuàng)建表格,并填充數(shù)據(jù) Table table = bookmark.CreateTable(dt.Rows.Count, dt.Columns.Count, 100f, RowAlignment.Left, dt);//用表格替換書簽bookmark_table的內(nèi)容 bookmark.ReplaceContent("bookmark_table", table);//生成Word文件 doc.SaveToFile("output.docx", FileFormat.Docx2013);

運(yùn)行代碼,得到下面的結(jié)果:


圖6?生成的文件

注:

1. Spire.Doc本身也有Bookmark類,但僅用于添加書簽到文檔中,請注意本文中的Bookmark類是自定義的方便自己使用的方法的集合。

2.??Spire.Doc 6.4.5 為商業(yè)版,在不應(yīng)用許可證的情況下,生成的文檔會(huì)有水印信息。筆者寫文章時(shí)已應(yīng)用臨時(shí)許可證(官方提供的用于測試軟件的License)。

3.??筆者使用免費(fèi)版的Spire.Doc測試過,以上效果基本都能實(shí)現(xiàn),但圖片的環(huán)繞方式只能設(shè)置為“InLine”,且水平位置為靠右,設(shè)置其他環(huán)繞方式時(shí),圖片位置會(huì)出錯(cuò)。這應(yīng)該是免費(fèi)版的Bug。

(原創(chuàng)內(nèi)容,轉(zhuǎn)載請注明出處)

總結(jié)

以上是生活随笔為你收集整理的C# 替换Word文档中的书签内容【详细步骤】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。