我浪费了很多时间来处理报告中的数据.使用数据透视表是一个好主意,但如何?我尝试了一些免费的数据透视表课程,但他们缺少小计.
然后,另一种方法.对于excel输出的报告,我使用的是EPPlus.它还支持pivottable.问题是我们的一些客户没有办公室(OpenOffice,MicrosoftOffice等),所以只创建和保存xlsx文件不起作用.我可以尝试使用EPPlus的唯一方法是创建一个ExcelPackage,用数据填充工作表,然后创建一个包含数据的数据透视表.
我有几个问题;
1)从该PivotTable对象可以访问数据透视表字段和值的输出. (到目前为止我不能).
2)与上述问题相关… xlsx文件是否包含有关数据透视表的数据或仅包含创建数据透视表的规则(如表名,sourceRange,rowFields,columnFields,dataFields,聚合选项等).我对此做了一个小测试.步骤如下:
>打开一个新的Excel文件.
>插入一些原始数据.
>使用数据创建数据透视表.
>更改了一些数据值. (没有刷新数据透视表)
>保存并关闭文件.
>打开文件.
事实上我的猜测是“数据透视表会根据新数据更新”,但我错了.它没有更新.这可能是“xlsx文件不仅包含数据透视表的规则,还包含它的所有值”的证明.如果是这样,我希望在不保存文件的情况下访问该数据(我不需要任何办公程序).
3)任何其他方法表示赞赏.
提前致谢
解决方法:
我绝不是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的最终格式不起作用,它可能是你最好的选择.
标签:c,excel,epplus 来源: https://codeday.me/bug/20190609/1207281.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。