从DataTable创建Excel数据透视表

时间:2013-04-05 18:36:14

标签: c# vsto pivot

我有一个托管大量定价数据的网络服务,并返回与某些规定查询参数相关的数据。数据作为Datatable对象(在C#中)返回 - 对象类型本身并不重要,因为数据直接进入内存并且不在主机Excel对象的电子表格中。

现在,我想从这些数据中创建一个数据透视表。

我一直在网上看高低,我看不到有人解释如何做到这一点。这不可能吗?将VSTO作为未来唯一支持Web服务数据的支持方式似乎是愚蠢的,但是不可能从这些数据中获取pivottables。

我所拥有的唯一解决方案是kludges,我想确保在我做其中一件丑陋的事情之前没有一个优雅的解决方案:

  1. 将数据表转储到Excel工作表并将pivottable指向excel范围。 这远非理想,因为我要么按行删除 整个数据集(缓慢)或2倍内存峰值 消费
  2. 将数据表转储到文件系统,并将pivottable指向flatfile。     这甚至更糟,但至少没有记忆缺陷。
  3. 这些操作真的是唯一的方法吗?必须有更优雅的东西。

    DataTable:http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx

    PivotCache:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.pivottable.pivotcache(v=office.11).aspx

1 个答案:

答案 0 :(得分:1)

Excel必须能够查看和访问数据以从中创建数据透视表。因此,您必须确保数据位于数据透视表加载程序可以读取的位置。此外,Excel是基于COM的,既不能查看也不能处理.NET对象。

这就是那么简单。

您的选择是:

  1. 将数据加载到Excel范围

  2. 将数据保存到文件

  3. 将数据存储到数据库(Access,SQL Server等)

  4. 将数据存储在数据仓库(SSAS,离线多维数据集等)中

  5. 就是这样。唯一可能的远程方法是实现作为OLE DB或ODBC数据源提供所必需的COM接口,但这将是很多工作中的一部分。