Jes*_*erg 17 c# ms-word office-interop
我试图在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");
}
Run Code Online (Sandbox Code Playgroud)
应用程序应该只运行一次,生成报告,而且不一定要快.它必须易于开发.
这里的问题是,似乎在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");
Run Code Online (Sandbox Code Playgroud)
然后我的模板上的事件处理程序在BeforeSave上根据MyCCTitle标题对象中的文本填写文档.
Jen*_*ens 12
不要使用Office Automation.Office自动化在后台打开办公室实例并对其执行操作.开办办公室实例600次似乎不是一件非常有趣的事情.(它永远不会运行服务器端)
看看Open XML.你可以在下面找到关于它的负载:
编辑:Openxmldeveloper正在关闭.请在http://www.ericwhite.com/上找到上面提到的所有来源.
小智 5
如果您使用的是Word 2007或2010格式,则应阅读有关OpenXML格式的信息
http://msdn.microsoft.com/en-us/library/bb264572(office.12).aspx
这里似乎有2个问题:
如何启动特定 id 值的流程
您如何填充文档。
sunilp 已回答问题2。数据绑定内容控件是为 Word 2007 及更高版本注入数据的最佳方式。
OP 的焦点似乎是第一季度。
没有命令行开关可以让您将任意值传递给 Word:http://support.microsoft.com/kb/210565
所以在我看来你有 4 个选择:
通过 OpenXML SDK 完成所有工作,根本不打开 Word(正如其他海报所建议的那样)
使用 OpenXML SDk 创建一个最小的预先存在的文档(包含您的 ID 号),然后打开 Word
自动将 Word 的 ID 号传递给文档,或许作为文档属性
使用 VSTO 或 Word 宏 (VBA) 在 Word 中创建 600 个文档
我?我将在 Word 中创建一个包含数据绑定内容控件的 docx,然后保存它。
然后,in 会将我的数据作为自定义 xml 部分注入其中,并保存它。(您可以使用 OpenXML SDK 执行此步骤,或者如果您需要让 Word 更新您的某些下游流程的绑定,则可以在 Word 中执行此步骤)