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

时间:2014-09-30 13:52:54

标签: c# excel epplus

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

然后,另一种方法。对于我使用excel的{​​{1}}报告输出。它还支持pivottable。问题是我们的一些客户没有办公室(OpenOffice,MicrosoftOffice等),因此只创建和保存EPPlus文件不起作用。我可以使用xlsx尝试的唯一方法是创建EPPlus,填充包含数据的工作表,然后创建包含数据的ExcelPackage

我有几个问题;

1)从PivotTable对象可以访问PivotTable字段和值的输出。 (到目前为止我不能)。

2)与上述问题相关... PivotTable文件是否包含有关xlsx的数据或仅包含创建PivotTable的规则(如表名,sourceRange, rowFields,columnFields,dataFields,aggregate options等)。我对此做了一个小测试。步骤如下:

  • 打开一个新的Excel文件。
  • 插入一些原始数据。
  • 使用数据创建数据透视表。
  • 更改了一些数据值。 (没有刷新透视表)
  • 保存并关闭文件。
  • 打开文件。

实际上我的猜测是"数据透视表会根据新数据"更新,但我错了。它没有更新。这可能是" xlsx文件的证明,不仅包含数据透视表的规则,还包含它的所有值"。如果是这样,我希望在不保存文件的情况下访问该数据(我不需要任何办公程序)。

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

提前致谢

1 个答案:

答案 0 :(得分:5)

我绝不是EPPlus的专家,但过去几个月一直在使用它,希望能够解释你的问题。

如果在EEP中创建全新的xlsx,将数据添加到工作表,创建指向数据/工作表的数据透视表,并保存它 - 那么数据透视表不包含任何数据。它只包含在excel中打开文件时PT应如何切片数据的定义(正如您在一个问题中提到的那样)。

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

是的,由于此数据透视表缓存,您的猜测实际上是错误的。您必须告诉excel更新正确的功能区中的数据源(假设数据仍在那里)以显示新数据。

因此,要访问数据,您可以通过进入PivotTable.WorkSheet对象并从中拉出数据来确定它所在的位置。您可以在我在此处创建的扩展方法中看到我是如何做到的:

Create Pivot Table Filters With EPPLUS

另一种选择是从xlsx中提取实际的worksheet.xml文件。 xlsx文件(以及任何其他MS Office。??? x文件)只是重命名的ZIP文件。因此,您可以使用标准.NET方法从zip中获取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的最终格式不起作用,它可能是您的最佳选择。