使用 C# 以编程方式查找和填充 Word 2010 外接程序中的书签



我在Visual Studio中有一个Microsoft word 2010加载项项目,我只是按照MSDN指南在功能区上创建了一个具有自定义功能的新选项卡。我已经做了一些谷歌搜索,但我似乎找不到任何示例(或者如果可能的话)使用 C# 查找书签,然后在 SQL 查询中使用书签名称并填充它。我正在处理的文档可以有几十个书签,并且有数百个文档。自动化此过程是重中之重。

所以基本上如果你想自动化word文档(通过word书签构建word文档模板),这是我通常的做法。

  • 复制模板
  • 在模板上工作
  • 以所需格式保存
  • 删除模板副本

在word文档中要替换的每个部分,您都必须为该位置插入书签(在区域中输入文本的最简单方法)。

我总是创建一个函数来完成此操作,最终我传递路径 - 以及所有文本以替换我的文档内书签。函数调用有时会变长,但它对我有用。

Application app = new Application();
Document doc = app.Documents.Open("sDocumentCopyPath.docx");

if (doc.Bookmarks.Exists("bookmark_1"))
{
object oBookMark = "bookmark_1";
doc.Bookmarks.get_Item(ref oBookMark).Range.Text = My Text To Replace bookmark_1;
}
if (doc.Bookmarks.Exists("bookmark_2"))
{
object oBookMark = "bookmark_2";
doc.Bookmarks.get_Item(ref oBookMark).Range.Text = My Text To Replace bookmark_2;
}
doc.ExportAsFixedFormat("myNewPdf.pdf", WdExportFormat.wdExportFormatPDF);
((_Document)doc).Close();
((_Application)app).Quit();

此代码应该可以让您启动并运行,除非您想将所有值传递到函数中。

有时,如果您有大量字段,则可以构建对象/类来包含值。

如果您需要更多示例,我也在撰写博客文章,因此,如果这对于您的用例来说还不够清楚,我会提供更多细节。

您可以使用Spire.DocFreeSpire.Doc库来实现此目的。我有一个 github 存储库,我展示了一个如何使用它的示例。

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System;
using System.Configuration;
using System.Drawing;
using System.IO;
namespace WorkingDocAndPdf
{
class Program
{
static void Main(string[] args)
{
var sourceFilePath = ConfigurationManager.AppSettings["SourceFilePath"];
var saveFilePath = ConfigurationManager.AppSettings["SaveFilePath"];
var document = new Document(sourceFilePath);
var bookmarksNavigator = new BookmarksNavigator(document);
bookmarksNavigator.MoveToBookmark("client_name");
bookmarksNavigator.ReplaceBookmarkContent("Ramil", true);
bookmarksNavigator.MoveToBookmark("client_taxno");
bookmarksNavigator.ReplaceBookmarkContent("VN-12300254178XY6", true);
bookmarksNavigator.MoveToBookmark("amount");
bookmarksNavigator.ReplaceBookmarkContent("871 AZN", true);
bookmarksNavigator.MoveToBookmark("date");
bookmarksNavigator.ReplaceBookmarkContent(DateTime.Now.ToString("dd.MM.yyyy"), true);
//It is for picture
var sealPath = ConfigurationManager.AppSettings["SealPath"];
bookmarksNavigator.MoveToBookmark("seal", true, true);
var section = document.AddSection();
var image = Image.FromFile(sealPath);
var paragraph = section.AddParagraph();
paragraph.AppendPicture(image);
bookmarksNavigator.InsertParagraph(paragraph);
document.Sections.Remove(section);
if (!Directory.Exists(saveFilePath))
Directory.CreateDirectory(saveFilePath);
var saveFileFullPath = $"{saveFilePath}\{Guid.NewGuid()}.pdf";

//It is for refresh cross reference bookmark, that you can use one bookmark on different location in document. In word shortcut it is `CTRL A + F9` 
document.IsUpdateFields = true;
document.SaveToFile(saveFileFullPath, FileFormat.PDF);
}
}
}

有关更多信息,您可以访问我的 github 存储库:WorkingDocAndPdf_FreeSpireDoc

我关于FreeSpire.Doc的文章(但用阿塞拜疆语写的):C#工作Word和PDF文件。打印表单

最新更新