【问题标题】:Programmatically injecting Xml data into an Excel 2007 workbook以编程方式将 Xml 数据注入 Excel 2007 工作簿
【发布时间】:2009-10-06 11:23:31
【问题描述】:

我需要创建一个 Excel 2007 模板工作簿并设计以编程方式使用数据集填充它的方法。模板工作簿应包含最终结果中出现的所有格式和样板内容,但不包括任何数据行。

数据注入过程必须能够动态地将数据插入工作簿,希望无需了解模板中存在的样式、条件列、计算、图表等。

我一直在试验新的 OpenXml 文档格式 SDK 2.0(使用 C#),发现它在阅读和操作 Excel 工作簿方面提供了很大的灵活性。但是,我越深入研究它,就越发现它需要深入了解 Excel 的内部工作原理。例如,表格、工作表和计算链都在包内单独维护的事实正在测试我的理解极限。我担心我的“解决方案”可能会在不同的数据场景中出现意外行为。

所以,我想知道是否有更强大的方法......

鉴于 Excel 能够绑定到外部数据源,包括 Xml 数据,我的数据集是否可以保存为 Xml 文件并注入到工作簿包文件中?换句话说,“外部”数据源是否可以放在工作簿包中?如果是这样,我将如何在模板中定义一个占位符表,以便在打开工作簿时自动绑定到注入的数据?

非常感谢您的建议。

【问题讨论】:

    标签: xml excel-2007


    【解决方案1】:

    这涉及到一些不同的方法,但我发现 Apache POI (http://poi.apache.org/) 非常适合生成 Excel 工作簿。我还没有找到我想要但不受支持的 Excel 功能。它也不需要非常深入的 Excel 知识,并带有一个很好的示例库。

    我也必须将基于 XML 的数据转换为 Excel。我在 Scala 中编写了使用 POI 的代码,以利用其出色的 XML 处理库。

    【讨论】:

    • 在这么长时间后看到这个问题复活令人惊讶,但我感谢您的反馈。我不知道 Apache POI,但它看起来很有趣。事实上,如果我知道它的存在,我可能不会有相同的动机来开发 ExtremeML (extrememl.com),但这是一段有趣的旅程,知道存在各种解决方案是令人鼓舞的。
    【解决方案2】:

    您是否尝试过使用 excel 中内置的“获取外部数据”来执行此操作?功能区的数据选项卡,然后在“来自其他来源”下拉列表中,您可以让 Excel 从您的 xml 文件中检索信息。可能需要进行一些实验来降低格式。

    【讨论】:

    • 感谢您的回复。是的,我认为您是对的,将工作表绑定到 Xml 数据源的唯一方法就是您所描述的。不幸的是,Excel 处理这个问题的方式不是很优雅——它只是获取数据并将其放置在单元格中,这意味着以编程方式维护数据意味着迭代单元格。我真的希望有一种方法可以让注入的数据保留其原始模式并简单地呈现在单元格中。但由于我很失望,我现在开始编写一个类库,它通过向 OpenXml SDK 添加一个抽象层来实现这一点。
    【解决方案3】:

    您可以尝试创建一个自定义按钮(在功能区栏上?)来读取 xml,并为您填充工作表。

    VSTO 是你的朋友。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2013-02-02
      • 1970-01-01
      相关资源
      最近更新 更多