zoukankan      html  css  js  c++  java
  • NPOI 无法访问已关闭的流

    最近都在参与公司的狐小E项目(https://www.hixiaoe.com/),一天到晚都是Mysql相关的知识,弄多了难免乏味,正好其他兄弟团队碰到了一个 C#用NPOI生成Excel模板的小问题,帮助解决了一下,换一下脑子还是不错的。

    兄弟团队是想用NPOI生成一个下载模板,让用户能把在系统里配置好的模板模板,生成Excel下载下来,并且在填Excel的时候有一些限制,比如产品分类,只能选定固定一些值,这些值是系统里提前配置好的。如下图。

     

    基本功能是实现了,但是保存的时候会提醒“显著功能损失”,如下图。

     

    这样保存过后,再打开,产品分类的选择控制就没有了。

     

    看了一下他们的代码,发现哥们用的是HSSFWorkbook,建议他们换成了XSSFWorkbook。

    HSSFWorkbook是解析出来excel 2007 以前版本的,后缀名为xls的。XSSFWorkbook是解析excel 2007 版的,后缀名为xlsx。

           换成XSSFWorkbook,又出一个问题,“无法访问已关闭的流“,如下图。      

    完整的错误信息 “System.ObjectDisposedException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理,其他信息: 无法访问已关闭的流。

    出现这个错误,是因为在使用book.Write方法后,会关闭流,这样导致再次使用Respons输出流的时候就出错了。

    为了解决这个问题,需要从MemoryStream派生一个新类,专给NPOI用,解决流关闭的问题。这个方法是从网络上搜来了的,实测可用。具体内容如下图。

     

    建好新的类以后,该造相关的代码,总是解决了。

     

    在公司狐小E(https://www.hixiaoe.com/)的项目里不断的成长,学习Mysql的更多知识,偶尔切出去做点别的事情也挺好,换换脑子。
    这个MemoryStream的派生类也是从网络上找来的,谢谢大家的帮助,让我能够解决这个问题,也希望这个小文章能帮到碰到一样问题的朋友们。

  • 相关阅读:
    OK335xS-Android mkmmc-android-ubifs.sh hacking
    OK335xS-Android pack-ubi-256M.sh hacking
    OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
    Qt Quick Hello World hacking
    Qt QML referenceexamples attached Demo hacking
    QT 5.4.1 for Android Ubuntu QtWebView Demo
    I.MX6 working note for high efficiency
    QT 5.4.1 for Android Windows环境搭建
    mkbootimg hacking
    Generate And Play A Tone In Android hacking
  • 原文地址:https://www.cnblogs.com/wuweimin999/p/13576707.html
Copyright © 2011-2022 走看看