最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#替換Word文檔中的書簽內(nèi)容的詳細(xì)步驟

 更新時(shí)間:2025年08月01日 09:47:03   作者:OfficeDocDevTeam  
Word書簽不但可以幫助讀者快速跳轉(zhuǎn)到想要查看的位置,而且可以用做“占位符”,本文總結(jié)了一個(gè)將常見的Word文檔元素替換進(jìn)書簽的C#解決方案,希望對(duì)大家有所幫助

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類來(lái)獲取和操作文檔中的書簽,但方法不是很直觀。為了方便,我自己封裝了Bookmark類,其中包括RepalceContent及其2個(gè)重載方法來(lái)分別應(yīng)對(duì)插入文字、圖片和表格三種情況。

  • 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對(duì)象
        /// </summary>
        /// <param name="rowsNum">行數(shù)</param>
        /// <param name="columnsNum">列數(shù)</param>
        /// <param name="columnWidth">列寬</param>
        /// <param name="horizontalAlignment">水平對(duì)齊方式</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對(duì)象
            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;//表格水平對(duì)齊方式
            return table;
        }
    }
}

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

//加載模板文檔
Document doc = new Document();
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\bookmark_template.docx");

//初始化Bookmark對(duì)象
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)過(guò)多年的礪練與發(fā)展,公司已逐步成以創(chuàng)新為引導(dǎo)的,"
    + "產(chǎn)品具有競(jìng)爭(zhēng)力,人才素質(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[] {"工號(hào)", "姓名", "年齡", "性別", "職位" });
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類,但僅用于添加書簽到文檔中,請(qǐng)注意本文中的Bookmark類是自定義的方便自己使用的方法的集合。

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

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

到此這篇關(guān)于C#替換Word文檔中的書簽內(nèi)容的詳細(xì)步驟的文章就介紹到這了,更多相關(guān)C#替換Word書簽內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#通過(guò)xpath查找xml指定元素的方法

    C#通過(guò)xpath查找xml指定元素的方法

    這篇文章主要介紹了C#通過(guò)xpath查找xml指定元素的方法,涉及C#操作XML文件的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Unity實(shí)現(xiàn)3D循環(huán)滾動(dòng)效果

    Unity實(shí)現(xiàn)3D循環(huán)滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)3D循環(huán)滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 使用C#自制一個(gè)Windows安裝包的詳細(xì)過(guò)程

    使用C#自制一個(gè)Windows安裝包的詳細(xì)過(guò)程

    這篇文章主要介紹了如何使用C#自制一個(gè)Windows安裝包,文中通過(guò)圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • C#在Windows窗體控件實(shí)現(xiàn)內(nèi)容拖放(DragDrop)功能

    C#在Windows窗體控件實(shí)現(xiàn)內(nèi)容拖放(DragDrop)功能

    這篇文章介紹了C#在Windows窗體控件實(shí)現(xiàn)內(nèi)容拖放(DragDrop)的功能,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 詳細(xì)了解C# 枚舉與位枚舉

    詳細(xì)了解C# 枚舉與位枚舉

    這篇文章主要介紹了C# 枚舉與位枚舉的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)枚舉和位枚舉,感興趣的朋友可以了解下
    2020-07-07
  • C#中的枚舉類型(Enum)介紹

    C#中的枚舉類型(Enum)介紹

    這篇文章介紹了C#中的枚舉類型(Enum),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 字符串替換Replace僅替換第一個(gè)字符串匹配項(xiàng)

    字符串替換Replace僅替換第一個(gè)字符串匹配項(xiàng)

    C#里面的String.Replace(string,string)方法替換的時(shí)候是替換所有的匹配項(xiàng),我們需要只替換第一個(gè)匹配項(xiàng),寫一個(gè)方法來(lái)實(shí)現(xiàn)這個(gè)功能
    2013-12-12
  • 那些年,我還在學(xué)習(xí)C# 學(xué)習(xí)筆記

    那些年,我還在學(xué)習(xí)C# 學(xué)習(xí)筆記

    那些年學(xué)了ASP.NET后,才開始學(xué)習(xí)C#,說(shuō)來(lái)也怪,怎么學(xué)了ASP.NET才來(lái)學(xué)習(xí)C#,其實(shí)沒(méi)有什么的
    2012-03-03
  • C#中值類型和引用類型的區(qū)別深度分析

    C#中值類型和引用類型的區(qū)別深度分析

    這篇文章主要介紹了C#中值類型和引用類型的區(qū)別深度分析,以通俗易懂的語(yǔ)言形象化的分析了C#中值類型和引用類型的區(qū)別,對(duì)于深入理解C#數(shù)據(jù)類型有著不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • c#擴(kuò)展datatable轉(zhuǎn)json示例

    c#擴(kuò)展datatable轉(zhuǎn)json示例

    這篇文章主要介紹了c#擴(kuò)展datatable轉(zhuǎn)json示例,需要的朋友可以參考下
    2014-05-05

最新評(píng)論

宝丰县| 团风县| 达州市| 盘锦市| 淄博市| 琼中| 房山区| 琼中| 莱芜市| 曲阜市| 盐源县| 卢湾区| 津市市| 和顺县| 瑞金市| 青岛市| 沂源县| 溆浦县| 龙里县| 苍溪县| 施秉县| 仪陇县| 青神县| 紫金县| 聂荣县| 新野县| 安宁市| 德化县| 溧水县| 旅游| 台州市| 山西省| 轮台县| 萨迦县| 庐江县| 瓦房店市| 扶沟县| 灵台县| 黎川县| 昆明市| 威宁|