我有一个ASP WebForms应用程序,其中我使用一个包含合并字段的word模板,用从数据库中提取的数据替换它们。这个应用程序工作得很好,word文档被导出,但是当尝试打印文档时,其中一个合并字段存在于标题中,失去了它的值并恢复到初始的合并字段名。这是必须从应用程序代码中修复的东西,还是一个单词设置问题。
任何帮助都是非常感谢的。谢谢!
发布于 2017-11-23 09:15:03
我已经成功地使用OpenXML生产力工具解决了这个问题。结果是你不能在标题中添加一个合并字段,所以我所做的就是把它放在一个文本框中。我忘了在最初的描述中提到这个部分。因此,文本元素被深埋在开放的xml中。当我设法找到它并记录里面的内容时,我发现我插入了MERGEFIELD <> MERGEFORMAT。每次我尝试在这个<>中插入我想要的值时,当我点击打印预览时,它就会被重置。所以我所做的,根据一个有类似问题的人的建议,删除这个文本框,创建一个干净的文本框,我只输入了"Test“。它需要在内部有一个字符串,这样打开的xml就可以创建元素文本(instrTxt)。在C#中,我这样做了:
foreach (var hPart in firstDoc.MainDocumentPart.HeaderParts)
{
foreach (var txt in hPart.Header.Descendants<Text>())
{
if(txt.Text == "Test")
{
txt.Text = "My custom text";
}
}
}因此,对于每个标头部分(因为我不能确定它的is..it可能在多个头部分中的哪个部分),获取文本类型的所有后代。我得到的比我想要的多一些。我还得到了一些包含页码的内容(因为我的页眉中也有)。所以我添加了一个if来检查它是否是我想要的文本元素。一旦我找到了它,我就添加了我想要的文本。
长话短说,我没有在标题中使用合并字段,而是使用了文本。也许这不是最有效的方法。也许问题仍然存在,(如果我可以在标题中插入一个合并字段,并且实际上使它在打印预览时不让word重置值?)但这对我有用。
https://stackoverflow.com/questions/47433063
复制相似问题