2

我们在 Visual Studio 2005 的 .NET 2.0 上继承了大量用 C# 编写的代码。后端数据库是 MS SQL server 2000。我们已将代码迁移到 Visual Studio 2010 的 .NET 4.0 上的 C#,并且可以编译和构建。问题是旧代码使用 Microsoft.Interop.Office.Word 库来允许我们使用邮件合并和宏嵌入模板生成服务器端报告。我们现在了解到 Visual Studio 2010 不支持服务器端 VBA 或 C# MS Word 应用程序工作。所以我们已经下载了 Open XML 2.0。文档令人沮丧。我们在网上找到的无数帖子都谈到了从头开始创建文档,几乎没有关于邮件合并或在 .dotm 文件中运行启用的宏等,其中大多数都涉及 Open XML 1.0。

我可以在 MS Word 中将 .dotx 文件转换为 .xml 文件,然后使用 C# 和 Open XML API 加载该 .xml 文件并嵌入从数据库中提取的变量数据吗?每次运行报告时,在代码中动态地构建一个 EXISTING .xml 文件(即 30 页报告)似乎是绝对疯狂的。我错过了什么吗?

如果有人成功地做到了这一点,那么使用 C# 代码的示例将非常有帮助。谢谢,艾米丽

4

1 回答 1

2

您可以尝试一个非常简单的查找/替换方法。

  1. 将您的模板创建为 .docx 文件并将其保存在服务器上
  2. 使用易于查找和解析的占位符更改所有邮件合并字段,这些占位符不会正常出现在文档中并且不需要 XML 编码。例如: {{FirstName}}
  3. 为您要生成的每个文档创建一个新的空白 .docx (zip) 文件
  4. 从模板 .docx 文件中读取每个文件
  5. 在阅读源文件时,根据需要搜索并替换您的标记
  6. 发送文件给客户端

我自己没有使用过 WordML,所以我不知道是否存在会阻止上述工作的陷阱,但根据我对 Open XML 和 SpreadsheetML 的使用的理解,它应该可以工作。

使用 OpenXML 比使用 Office Interop 更复杂。Office 互操作 API 更接近 Office UI,因此熟悉且更易于使用。Open XML API 是核心 XML 的一个非常轻量级的包装器,几乎与直接处理 XML 完全相同。如果没有完全相同的自动熟悉度,它会更复杂。

但是,OpenXML比办公室互操作要好得多Office 互操作对于服务器使用来说从来都不是安全的。认为这是摆脱旧定时炸弹的好时机。

于 2011-01-20T04:12:04.580 回答