我使用Apache POI生成了一个包含6张纸的工作簿,其中3张带有数据透视表,其余3张是这些数据透视表的数据源。
Sheet 1 -> Data1
Sheet 2 -> PivotTable_Data1
Sheet 3 -> Data2
Sheet 4 -> PivotTable_Data2
Sheet 5 -> Data3
Sheet 6 -> PivotTable_Data3
带有“数据透视表”的工作表名称包含数据透视表。
我需要隐藏数据表,以便生成的工作簿只显示数据透视表,用户可以随意取消隐藏数据表。
我使用下面的代码来隐藏工作表。
workbook.setSheetVisibility(workbook.getSheetIndex(sheet),SheetVisibility.HIDDEN);
无论我如何尝试,我都无法单独隐藏Sheet 1,这适用于Sheet 3和5。
我认为这可能是因为无法隐藏活动工作表。考虑到这一点,我尝试将工作表2设置为选定的工作表/活动选项卡,但这打破了数据透视表。
我知道SheetVisibility.VERY_HIDDEN
但我确定这会对用户造成恐慌,因为它需要启用开发者模式来取消隐藏工作表。
我怎样才能做到这一点?
答案 0 :(得分:1)
要解决此类问题,请在Excel中呈现数据透视表时阅读错误消息。我怀疑它是:"无法在组编辑模式下编辑数据透视表"。 这意味着某些工作表被分组(同时选择)。如果要将第二个工作表设置为活动工作表并且不取消选择第一个工作表,则会出现这种情况。然后选择两张纸。
所以:
workbook.getSheetAt(0).setSelected(false);
workbook.setActiveSheet(1);
...
workbook.setSheetVisibility(workbook.getSheetIndex(sheet),SheetVisibility.HIDDEN);
为什么在组编辑模式下渲染数据透视表失败的背景:
如果将多个工作表分组(同时选择),则其中一个分组工作表中的所有更改也会转到所有选定的工作表。因此,改变单元格内容的数据透视表的呈现也将改变也被选择的其他表格中的单元格内容。但这失败了。