1. 程式人生 > >C#使用NPOI操作Excel錯誤解決

C#使用NPOI操作Excel錯誤解決

問題:未能載入檔案或程式集“ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf116

解決方案:

1:發現沒有引用此dll,在專案的package資料夾下SharpZipLib.0.86.0資料夾中找到SharpZipLib.dll引用,即OK。

2:引用版本不對。

問題:System.ObjectDisposedException: 無法訪問已關閉的檔案。

(順便附上原始碼)

        /// <summary>
        /// 匯出資料到Excel中
        /// </summary>
        /// <param name="Url">檔案匯出地址</param>
        public void Export(string Url, List<Word> list)
        {
            try
            {
                //建立Excel檔案的物件
                IWorkbook book;
                string fileExt = Path.GetExtension(Url).ToLower();
                if (fileExt == ".xlsx")
                {
                    book = new XSSFWorkbook();
                }
                else if (fileExt == ".xls")
                {
                    book = new HSSFWorkbook();
                }
                else
                {
                    book = null;
                }
                if (book == null)
                {
                    return;
                }

                //新增一個sheet
                ISheet sheetWords = book.CreateSheet("Words");

                //給sheet新增第一行的頭部標題
                IRow rowWords = sheetWords.CreateRow(0);
                rowWords.CreateCell(0).SetCellValue("序號");
                rowWords.CreateCell(1).SetCellValue("詞條");
                rowWords.CreateCell(2).SetCellValue("詞性詞義");

                //將資料逐步寫入sheet各個行
                for (int i = 0, k = 0; i < list.Count - 1; i++, k++)
                {
                       IRow rowtemps = sheetWords.CreateRow(k + 1);
                       rowtemps.CreateCell(0).SetCellValue(k + 1);
                       rowtemps.CreateCell(1).SetCellValue(list[i + 1].WordEntry);
                       rowtemps.CreateCell(2).SetCellValue(list[i + 1].WordProperty + list[i + 1].Meaning);
                }
                // 寫入到檔案           
                FileStream fs = new FileStream(Url, FileMode.Create);
                book.Write(fs);
                fs.Seek(0, SeekOrigin.Begin);
fs.Close(); } catch (Exception ex) { throw new Exception(ex.Message.ToString()+"\t"+ex.ToString()); } }

解決方法:註釋了fs.Seek(0, SeekOrigin.Begin);就可了!