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

本文关键字:数据 或者 操作 操作数 获取 何轻松 透视 EPPlus | 更新日期: 2023-09-27 18:25:09

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

然后是另一种方法。对于报告的excel输出,我使用EPPlus。它还支持数据透视表。问题是,我们的一些客户没有office(OpenOffice、MicrosoftOffice等),因此仅创建和保存xlsx文件是不起作用的。使用EPPlus,我唯一可以尝试的就是创建ExcelPackage,用数据填充工作表,然后用数据创建PivotTable

我有几个问题;

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

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

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

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

3) 感谢任何其他方法。

提前感谢

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

我绝不是EPPlus的专家,但在过去的几个月里,我一直在与它合作,希望能为您的问题提供一些线索。

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

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

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

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

使用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的最终格式不起作用,它可能是您的最佳选择。