【发布时间】:2022-05-10 00:17:35
【问题描述】:
我正在尝试在 Microsoft Office Word 中创建大约 600 个报告。这些文档填充了来自数据库的数据和在本地驱动器上找到的图像。 我已经想通了,我可能会在 Visual Studio 2010 中创建一个 Word 模板项目,并对模板进行编程,这样当您输入单个值(id-number)时,它会自动填写整个文档。
我非常有信心这是可能的。唯一的问题是。如何遍历数据库中的所有条目,根据模板打开一个新文档并设置 id-value?
for(int i = 0; i < idnumbers.Count(); i++)
{
Word.Application app = new Word.Application();
Word.Document doc = app.Documents.Add(@"C:\..\WordGenerator\bin\Debug\WordTemplate.dotx");
//input the id-number below: HOW??
doc.SaveAs(FileName: @"c:\temp\test.docx");
}
该应用程序应该只运行一次,生成报告,而且它不必很快。它必须易于开发。
这里的问题是,在 Word 项目之外似乎无法访问 DocumentBase 对象。替代Microsoft.Office.Interop.Word.Document 没有SelectContentControlsByTitle 之类的功能,无法让我找到并设置我的ContentControls。而这正是我需要做的..
编辑:这是我的代码现在将文本插入我的字段的样子:
Word.Application app = new Word.Application();
Word.Document doc = app.Documents.Add(@"C:\..\test.dotx");
foreach (Word.ContentControl cc in doc.SelectContentControlsByTitle("MyCCTitle"))
{
cc.Range.Text += "1234";
}
doc.SaveAs(FileName: @"c:\temp\test.docx");
然后,我在 BeforeSave 上的模板上的事件处理程序根据 MyCCTitle-titled 对象中的文本填写文档。
【问题讨论】:
-
问这个问题已经有一段时间了,从那时起事情发生了很大变化。我创建了一个名为“docxtemplater”的库,在github.com/open-xml-templating/docxtemplater 上可用,它使用Javascript 非常优雅地解决了这个问题
标签: c# ms-word office-interop