C# 操作Word书签二——插入图片、表格到书签;读取、替换书签

概要

书签的设置可以帮助我们快速的定位某段文字,使用起来很方便,也很节省时间。在前一篇文章“C# 如何添加/删除Word书签”中介绍了插入、删除书签的方法,本篇文章将对C# 操作Word书签的功能做进一步介绍。示例内容将包含以下要点:

  • 在现有书签位置插入图片
  • 在现有书签位置插入表格
  • 读取书签位置的文档内容
  • 替换现有书签位置内容

 

使用工具

ps:下载安装该类库后,注意添加引用Spire.Doc.dl到项目程序,dll文件可在安装路径的Bin文件夹中获取。

示例代码(供参考)

测试文档如下:

 

 

【示例1】 在现有书签位置插入图片

步骤 1: 添加using指令

using Spire.Doc;
 Spire.Doc.Documents;
 Spire.Doc.Fields;
using System.Drawing;

步骤 2 :主要代码段

//创建实例,加载文档
Document document = new Document();
document.LoadFromFile("test.docx");

实例化BookmarksNavigator类,指定需要添加图片的书签“Bookmark1”
BookmarksNavigator bn =  BookmarksNavigator(document);
bn.MoveToBookmark(Bookmark1",true,1)">true添加段落,加载图片并插入到段落
Section section0 = document.AddSection();
Paragraph paragraph = section0.AddParagraph();
Image image = Image.FromFile(img.png);
DocPicture picture = paragraph.AppendPicture(image);
bn.InsertParagraph(paragraph);
document.Sections.Remove(section0);

保存文档并打开
string output = result.docx;
document.SaveToFile(output,FileFormat.Docx);
System.Diagnostics.Process.Start(output);

图片插入效果:

 

全部代码:

 System.Drawing;

namespace InsertImgToBookmark_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            创建实例,加载文档
            Document document =  Document();
            document.LoadFromFile();

             BookmarksNavigator(document);
            bn.MoveToBookmark(添加段落,加载图片并插入到段落
            Section section0 = document.AddSection();
            Paragraph paragraph = section0.AddParagraph();
            Image image = Image.FromFile();
            DocPicture picture = paragraph.AppendPicture(image);
            bn.InsertParagraph(paragraph);
            document.Sections.Remove(section0);

            保存文档并打开
            ;
            document.SaveToFile(output,FileFormat.Docx);
            System.Diagnostics.Process.Start(output);
        }
    }
}
View Code

 

 【示例 2】在现有书签位置插入表格

步骤 1:添加using指令

using System.Data;

步骤 2 :创建文档,加载文件

Document doc =  Document();
doc.LoadFromFile(");

步骤 3 :创建表格

创建Table对象
Table table = new Table(doc,1)">创建模拟数据
DataTable dt =  DataTable();
dt.Columns.Add(PItypeof());
dt.Columns.Add(TypeNov.YTD));                     
dt.Rows.Add(new string[] {  });
dt.Rows.Add(1BAIC EC-Series15.71964.9102Tesla Model S3.88946.9513Nissan Leaf2.81746.423 });

将数据填充至表格
table.ResetCells(dt.Rows.Count,dt.Columns.Count);
for (int i = 0; i < dt.Rows.Count; i++)
{
    int j = 0; j < dt.Columns.Count; j++)
    {
        table.Rows[i].Cells[j].AddParagraph().AppendText(dt.Rows[i][j].ToString());
    }
}

步骤 4 :插入表格到书签位置

获取指定书签位置
BookmarksNavigator navigator =  BookmarksNavigator(doc);
navigator.MoveToBookmark(origin2将表格添加至TextBodyPart
TextBodyPart part = navigator.GetBookmarkContent();
part.BodyItems.Add(table);
替换原有书签内容
navigator.ReplaceBookmarkContent(part);

步骤 5 :保存文件

保存并打开文件
doc.SaveToFile(output.docx,FileFormat.Docx2013);
System.Diagnostics.Process.Start(");

 

 表格插入效果:

全部代码:

 System.Data;

 InsertTableToBookmark_Doc
{
    创建文档,加载文件
            Document doc =  Document();
            doc.LoadFromFile(创建Table对象
            Table table = 创建模拟数据
            DataTable dt =  DataTable();
            dt.Columns.Add());
            dt.Columns.Add());                     
            dt.Rows.Add( });
            dt.Rows.Add( });

                        table.ResetCells(dt.Rows.Count,dt.Columns.Count);
            )
            {
                )
                {
                    table.Rows[i].Cells[j].AddParagraph().AppendText(dt.Rows[i][j].ToString());
                }
            }

            获取指定书签位置
            BookmarksNavigator navigator =  BookmarksNavigator(doc);
            navigator.MoveToBookmark(将表格添加至TextBodyPart
            TextBodyPart part = navigator.GetBookmarkContent();
            part.BodyItems.Add(table);

            替换书签内容
            navigator.ReplaceBookmarkContent(part);

            保存并打开文件
            doc.SaveToFile();
        }
    }
}
View Code

 

【示例3】读取书签位置的内容

步骤 1 :添加using指令

using System;

步骤 2 :获取书签位置的内容

初始化BookmarkNavigator类对象
BookmarksNavigator navigator =  BookmarksNavigator(doc);
定位到指定书签位置,获取书签位置的文档内容
navigator.MoveToBookmark(bookmark1);
TextBodyPart textBodyPart = navigator.GetBookmarkContent();

步骤 3 :读取书签内容

遍历书签内容中的子项目,并将文本信息提取至string类型变量中
string text = null;
foreach (var item in textBodyPart.BodyItems)
{
    if (item is Paragraph)
    {
        var childObject in (item as Paragraph).ChildObjects)
        {
            if (childObject  TextRange)
            {
                text += (childObject  TextRange).Text;
            }
        }
    }
}
控制台输出文本
Console.WriteLine(text);
Console.ReadLine();

 

 读取结果:

全部代码:

 System;

 GetTextOfBookmark_Doc
{
    实例化Document类,加载测试文档
            Document doc = 初始化BookmarkNavigator类对象
            BookmarksNavigator navigator =  BookmarksNavigator(doc);
            定位到指定书签位置,获取书签位置的文档内容
            navigator.MoveToBookmark();
            TextBodyPart textBodyPart = navigator.GetBookmarkContent();

            遍历书签内容中的子项目,并将文本信息提取至string类型变量中
            ;
             textBodyPart.BodyItems)
            {
                 Paragraph)
                {
                     Paragraph).ChildObjects)
                    {
                         TextRange)
                        {
                            text += (childObject  TextRange).Text;
                        }
                    }
                }
            }
                        Console.WriteLine(text);
            Console.ReadLine();
        }
    }
}
View Code

 

【示例4】替换现有书签内容

步骤 1 :添加using指令

using Spire.Doc.Fields;

步骤 2 :加载文档

Document document = ");

步骤 3 :添加段落及文字

Section sec = document.AddSection();添加section
sec.AddParagraph().AppendText(Welcome Back,\n My Friend!"); 添加段落到section,并添加字符串内容

步骤 4 :获取段落

获取段落内容 
ParagraphBase firstReplacementParagraph = sec.Paragraphs[0].Items.FirstItem  ParagraphBase;
ParagraphBase lastReplacementParagraph = sec.Paragraphs[sec.Paragraphs.Count - 1].Items.LastItem  ParagraphBase;
实例化类TextBodySelection和TextBodyPart
TextBodySelection selection =  TextBodySelection(firstReplacementParagraph,lastReplacementParagraph);
TextBodyPart part = new TextBodyPart(selection);

步骤 5 :替换书签内容

BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(document);实例化BookmarksNavigator类 
bookmarkNavigator.MoveToBookmark(true);定位到书签“bookmark1”所在段落的位置
bookmarkNavigator.DeleteBookmarkContent(删除原有书签位置的内容
bookmarkNavigator.ReplaceBookmarkContent(part,1)">用新添加段落的内容替换掉原书签的内容并保留格式
document.Sections.Remove(sec); 移除section

步骤 6 :保存文档

保存文档并打开
document.SaveToFile(替换书签.docx);
System.Diagnostics.Process.Start(");

 

替换效果:

全部代码:

 Spire.Doc.Fields;

 EditOrReplaceBookmark_Doc
{
    创建Document类实例,加载文档 
            Document document = );

            Section sec = document.AddSection();添加section
            sec.AddParagraph().AppendText(添加段落到section,并添加字符串内容

            获取段落内容 
            ParagraphBase firstReplacementParagraph = sec.Paragraphs[ ParagraphBase;
            ParagraphBase lastReplacementParagraph = sec.Paragraphs[sec.Paragraphs.Count -  ParagraphBase;
            实例化类TextBodySelection和TextBodyPart
            TextBodySelection selection =  TextBodyPart(selection);

            BookmarksNavigator bookmarkNavigator = 实例化BookmarksNavigator类 
            bookmarkNavigator.MoveToBookmark(定位到书签“bookmark1”所在段落的位置
            bookmarkNavigator.DeleteBookmarkContent(删除原有书签位置的内容
            bookmarkNavigator.ReplaceBookmarkContent(part,1)">用新添加段落的内容替换掉原书签的内容并保留格式            
            document.Sections.Remove(sec); 移除section

            保存文档并打开
            document.SaveToFile();
            System.Diagnostics.Process.Start();
        }
    }
}
View Code

 

以上是本次关于C# 操作Word书签功能的补充介绍,如需转载,请注明出处。

(本文完)

 

相关文章

文章浏览阅读6.2k次,点赞2次,收藏3次。C#数学运算表达式解...
文章浏览阅读5.2k次,点赞6次,收藏7次。程序要做到用户配置...
文章浏览阅读9k次。错误信息检测到 ContextSwitchDeadlock M...
文章浏览阅读2w次,点赞10次,收藏9次。我发生错误时的环境:...
文章浏览阅读9.8k次。C# 二进制字节流查找函数IndexOf ...
文章浏览阅读2.5w次,点赞3次,收藏9次。c#DataGridView数据...