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

ser*_*dar 4 c# excel epplus

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

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

我有几个问题;

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

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

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

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

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

提前致谢

Ern*_*e S 5

我绝不是EPPlus的专家,但过去几个月一直在与它合作,希望能够对你的问题有所了解.

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

当您在excel中实际打开文件并保存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());
Run Code Online (Sandbox Code Playgroud)

它不会做所有的XML操作,但如果XLSX的最终格式不起作用,它可能是你最好的选择.