2

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

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

我一直在网上寻找高低,我看不到任何人解释如何做到这一点。这是不可能的吗?建议将 VSTO 作为未来唯一支持的使用 Web 服务数据的方式似乎是愚蠢的,但是却不可能从该数据中提取数据透视表。

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

  1. 将数据表转储到 excel 工作表并将数据透视表指向 excel 范围。这远非理想,因为我要么对整个数据集进行逐行删除(慢得见鬼),要么以 2 倍的内存消耗达到峰值
  2. 将数据表转储到文件系统并将数据透视表指向平面文件。这甚至更糟,但至少没有内存缺陷。

这些真的是执行此操作的唯一方法吗?必须有更优雅的东西。

数据表: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

4

1 回答 1

1

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

就这么简单。

您的选择是:

  1. 将数据加载到 Excel 范围内

  2. 将数据保存到文件

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

  4. 将数据存储在数据仓库(SSAS、离线 Cube 等)中

而已。唯一其他可能的远程方法是实现呈现为 OLE DB 或 ODBC 数据源所必需的 COM 接口,但这将是大量工作。

于 2013-04-05T19:33:33.750 回答