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的派生類也是從網絡上找來的,謝謝大家的幫助,讓我能夠解決這個問題,也希望這個小文章能幫到碰到一樣問題的朋友們。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM