gpt4 book ai didi

c# - 使用合并 (SimpleField) 字段从 .dotx 生成 .docx

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:31 25 4
gpt4 key购买 nike

所以,首先这是我打开 dotx 并创建一个新的 docx 副本(然后修改副本)的代码。为简洁起见,但本质上采用 3 个参数的数据表(以使其可用于遗留系统),作为模板字符串的 UNC 路径和作为输出文档字符串的 UNC 路径:

using (WordprocessingDocument docGenerated = WordprocessingDocument.Open(outputPath, true))
{
docGenerated.ChangeDocumentType(WordprocessingDocumentType.Document);

foreach (SimpleField field in docGenerated.MainDocumentPart.Document.Descendants<SimpleField>())
{
string mergeFieldName = GetFieldName(field).Trim();

DataRow[] dr = dtSchema.Select("FieldName = '" + mergeFieldName + "'");

if (dr.Length > 0)
{
string runProperties = string.Empty;
foreach (RunProperties property in field.Descendants<RunProperties>())
{
runProperties = property.OuterXml;
break;
}

Run run = new Run();
run.Append(new RunProperties(runProperties));
run.Append(new Text(dr[0]["FieldDataValue"].ToString()));

field.Parent.ReplaceChild<SimpleField>(run, field);
}
}

docGenerated.MainDocumentPart.Document.Save();
}

我最初做的是采用 .dot 模板并将其重新保存为 .dotx 并祈祷,但没有奏效。因此,我尝试删除 .dotx 中的所有合并字段并再次添加它们。这行得通 - 但它只会找到一个合并字段(作为 SimpleField),特别是在保存 .dotx 之前添加的最后一个。使用开放式 XML 生产力工具进一步查看模板,我可以看到所有其他合并字段都是 w:instrText 类型,这就是它们被忽略的原因。

我实际上才刚刚开始使用 OpenXML,因为我们希望用它来取代我们当前的办公自动化,所以我目前知之甚少。有人可以进一步指导我或指出一个好的资源吗?我用谷歌搜索了一下,但找不到我的具体问题。我试图推迟阅读整个 SDK 文档(我知道,我知道!),因为我需要快速组合一个解决方案,所以我专注于一项任务,即采用我们现有的 .dot 模板,将它们转换为.dotx,只需用数据替换合并字段即可派生 .docx。

提前致谢!

最佳答案

使用 OpenXml - 严格来说,您不需要为模板使用 .dotx,相反,您可以直接使用 DocX 制作模板。学习 OpenXML 的一个很好的资源显然是 http://openxmldeveloper.org/你可以找到一个好的pdf在那里读书。

我现在正在使用第三方 API docx.codeplex.com 为我的公司开发服务器端文档自动化解决方案。参见示例 http://cathalscorner.blogspot.co.uk/2009/08/docx-v1007-released.html这类似于您的场景.. 将字段与数据合并..希望这有帮助..

关于c# - 使用合并 (SimpleField) 字段从 .dotx 生成 .docx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9825991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com