如何在EPPlus中筛选列(而不是行)?

19

在EPPlus中,过滤特定列的行就像吃馅饼一样容易:

private ExcelWorksheet prodUsageWorksheet;
. . .
prodUsageWorksheet.Cells["A6:A6"].AutoFilter = true;

这使我能够筛选A列中的行:

enter image description here

我还需要筛选掉某些列,例如月份列(在截图中是Sep 15和Oct 15,但通常会有更多)。例如,我想使用EPPlus以编程方式生成以下内容:

enter image description here

取消选择“全选”,选择一些月份,然后单击“确定”按钮,未被选择的月份将折叠。

查看一些传统的Excel Interop代码,似乎是这样做的:

fld = ((PivotField) pvt.PivotFields("Month"));
fld.Orientation = XlPivotFieldOrientation.xlColumnField;
fld.NumberFormat = "MMM yy";

具体来说,第二个代码块(方向设置为xlColumnField)是带有排序/筛选按钮的列,当操作时,它会有条件地显示/隐藏各种列。
它是否根据数字格式确定哪些列可见/隐藏?也就是说,如果值为“Sep 15”或“Oct 16”?
我不知道,但我在代码中没有看到任何其他更具体地设置列过滤限制的内容。
无论如何,如果这是Excel Interop实现的方式,那么在EPPlus中的等效方式是什么?

2
你可能已经查看了这篇文章,但似乎EPPlus无法本地添加列过滤器。该链接提供了一种解决方法,但我不认为它适用于你的情况。 - Innat3
1
是的,我看到了,谢谢;不过这让我不得不重新使用Excel Interop,很遗憾。这就像在滚石拒绝演奏“Wild Thang!”时预定Troggs一样。 - B. Clay Shannon-B. Crow Raven
2
是的,我本来想建议迁移到Interop库,我能理解你的痛苦 :/ - Innat3
1
很遗憾,在 XML 中实现你所要的功能可能非常困难。你需要处理许多文件,而我在放弃之前并没有完全理清楚它们。因为对于我当时要做的事来说,并不是那么重要,所以最终选择了放弃。祝好运。 - Ernie S
2
我曾经遇到过类似的问题,这是我的解决方法: 基本上,xlsx文件只是一个zip文件。创建你的基础工作簿,将其解压到某个地方,用Excel修改工作簿,保存它,再次解压并检查未压缩内容的差异。然后,你可以通过从代码中添加或编辑条目来模仿Excel的行为。最好的部分:没有Excel-interop! 我也写了一篇博客文章,你可以在这里查看: http://www.dotnetfalcon.com/adding-custom-parts-to-an-xlsx-workbook/ 如果你喜欢这种方法,我很乐意进一步讨论,如果需要帮助,请告诉我。 - Akos Nagy
显示剩余7条评论
1个回答

3
这个问题在另一个帖子中已经被问过了。而且,EPPlus并不是为此而设计的,因为列过滤更多的是“动态”终端用户功能。
看一下这个链接,看看它是否回答了你的问题: 在列上添加特定的自动筛选器

我认为应该是一条注释而不是答案。 - Uwe Keim
赞同答案中的评论;我使用了Aspose Cells来完成这个任务;它可以做数据透视表 - 就像使用Excel Interop一样 - 但速度更快,以至于Aspose Cells:Excel Interop速度比看起来像是猎豹:糖蜜。 - B. Clay Shannon-B. Crow Raven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接