把几个ASP.NET中制作Excel报表用NPOI改写后(原来用COM方式),立即有人反映,打开下载的Excel报表时,有提示“是否要恢复此工作薄的内容?如果信任此工作薄的来源,请单击“是”。。。“的信息,如果选“是”则打印时第二页开始没有(重复的)标题行。
仔细检查发现,俺用Excel2000制作的报表模板文件,使用NPOI中RemoveSheetAt()函数删除表单后,在Excel2000下打开与预览没有问题,但在Excel2003/Excel2010/WPS中打开就有上述提示,并且页面设置->工作表->打印区域->顶端标题行中$1:$6的内容丢失,从而造成打印的第二页没有标题行。
经过多次测试后发现,隐藏表单即可达到类似删除的目的,NPOI中的代码如下:
workBook.SetSheetHidden(k, SheetState.VeryHidden); // workBook 为 HSSFWorkbook 对象
还需要特别注意的是,仍然需要设置一个可显示的表单,俺的解决方法是:设置第一个非隐藏的表单为可视的、选择的,NPOI的代码如下:
for (int k = 0; k < workBook.NumberOfSheets - 1; k++)
{
if (workBook.IsSheetVeryHidden(k) == false)
{
HSSFSheet st = (HSSFSheet)workBook.GetSheetAt(k);
workBook.SetSheetOrder(st.SheetName, 0); // 调整到第一个
workBook.FirstVisibleTab = 0;
WorkBook.SetSelectedTab(0);
break;
}
}
上述方法和代码在XP/Win7、Office2000/2003/2010和NPOI2.0.5.0下测试通过。
后记: