NPOI中出现“是否要恢复此工作薄的内容?如果信任此工作薄的来源。。。”的问题的解决方法

        把几个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下测试通过。

       后记:

  • RemoveSheet()等方法只造成该文件打开时给出提示信息,丢失标题行重复(Sheet的RepeatingRows属性对象)的根本原因是,NPOI使用表单序号位置确定该表单的标题重复行信息,使用RemoveSheet()或SetSheetOrder()等函数时,将导致表单重复行信息改变。
  • 同样,WookBook.CloneSheet()方法只拷贝表单结构,不复制表单标题重复行。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值