c# - 在 Open XML 2.0 中打开一个 microsoft .xml 文件并添加变量数据

标签 c# visual-studio openxml-sdk openxml

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

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

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

最佳答案

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

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

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

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

但是,OpenXML 比办公室互操作。对于服务器使用,Office 互操作从未是安全的。将此视为摆脱旧的定时炸弹的好时机。

关于c# - 在 Open XML 2.0 中打开一个 microsoft .xml 文件并添加变量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4694507/

相关文章:

c# - NoTextEdit ShapeLock 不起作用 - OpenXML SDK

c# - 在 ASP.NET 中捕获由通用处理程序 (ashx) 文件引起的异常

.net - 在Windows 8上安装Visual Studio 2012 Ultimate

c++ - Visual Studio 2010 的全局源代码控制忽略模式中应包含哪些内容?

c# - OpenXml Word 脚注

c# - OpenXML 与 MS Excel 中的自定义列宽

c# - 是否有更好的方法使用 Visual Studios 调试器在 C# 中查看带有参数的 MySql 语句?

c# - MySQL 查询中的输入字符串格式不正确

c# - 为什么在重新创建 WPF DataGrid 列时 Dispatcher.BeginInvoke 不起作用?

xml - 如何协调 Visual Studio 注释期望与具有 Doxygen 注释的代码?