EPPlus /如何从数据透视表中获取数据? 或者如何轻松操纵数据?

我在浪费很多时间来处理报告中的数据。 使用数据透视表是一个好主意,但如何? 我尝试了一些免费的PivotTable类,但他们缺乏小计。

那么,另一种方法。 对于我使用EPPlus的报告excel输出。 它也支持pivottable。 问题是我们的一些客户没有办公室(OpenOffice,MicrosoftOffice等),所以只是创build和保存一个xlsx文件不起作用。 我唯一能用EPPlus尝试的EPPlus是创build一个ExcelPackage ,用数据填充工作表,然后用数据创buildPivotTable表。

我有几个问题;

1)从该PivotTable对象可以访问PivotTable字段和值的输出。 (到现在我不能)。

2)与上述问题相关… xlsx文件是否包含有关PivotTable或仅创buildPivotTable表的规则(如表名,sourceRange,rowFields,columnFields,dataFields,聚合选项等)。 我已经做了一个小testing。 步骤如下:

  • 打开一个新的Excel文件。
  • 插入一些原始数据。
  • 用数据创build数据透视表。
  • 改变了一些数据值。 (不刷新数据透视表)
  • 保存并closures文件。
  • 打开文件。

实际上我的猜测是“数据透视表会根据新数据更新”,但是我错了。 它没有更新。 这可能是“xlsx文件不仅包含数据透视表的规则,还包含它的所有值”的certificate。 如果是这样,我有一个希望访问该数据,而不保存该文件(我不需要任何办公软件)。

3)任何其他的方法表示赞赏。

提前致谢

我绝不是EPPlus的专家,但是在过去的几个月里一直在使用EPPlus,希望能够对你的问题提供一些启示。

如果您在EEP中创build了一个全新的xlsx,请将数据添加到工作表中,创build指向数据/工作表的数据透视表并保存 – 然后数据透视表不包含任何数据。 它只是包含了在Excel中打开文件时PT应该如何分割数据的定义(正如你在其中一个问题中提到的那样)。

当你真正在Excel中打开文件并保存时 ,excel所做的就是复制PT所依赖的所有数据,并将其放在数据透视表caching中。 这就是为什么您可以删除包含数据的原始单元格,保存该文件,然后在Excel中重新打开它(可能必须忽略一些错误),并仍然可以看到带有数据的PT。 您甚至可以双击PT中的一个数据单元格,然后excel会将相关数据的部分或全部(取决于您单击的单元格)重新生成新的表格。

是的,你的猜测实际上是错误的,因为这个数据透视表caching。 你必须告诉excel来更新合适的Ribbon中的数据源(假设数据仍然存在),以查看新的数据。

因此,要访问数据,您可以进入PivotTable.WorkSheet对象并从中提取数据,从而确定它的位置。 你可以看到我在这里创build的扩展方法是如何做到的:

使用EPPLUS创build数据透视表filter

另一个select是从xlsx中提取实际的worksheet.xml文件。 一个xlsx文件(和任何其他MS Office。x文件)只是重命名的ZIP文件。 所以你可以使用标准的.NET方法从压缩文件中获取xml文件,并使用类似LinqToXml的方法来提取数据。 所以像这样的东西:

 var zip = new ExcelPackage(file).Package; var recordspart = zip.GetPart(new Uri("/xl/worksheets/sheet1.xml", UriKind.Relative)); var recordsxml = XDocument.Load(recordspart.GetStream()); 

它不会很漂亮的做所有的XML操作,但如果XLSX的最终格式将无法正常工作,这可能是你最好的select。