NPOI遇到的錯誤及其解決過程
檔案流
1、Invalid header signature; read System.Char[], expected System.Char[] - Your file appears not to be a valid OLE2 document
發生錯誤的程式碼:
using FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);//根據path建立或者開啟檔案流
await file.CopyToAsync(fileStream);//非同步地將上傳檔案的內容複製到檔案流。
//獲取檔名稱字尾
string fileExtension = file.FileName.Substring(file.FileName.LastIndexOf(".") + 1);
//二進位制轉WorkBook
IWorkbook workbook = fileExtension == "xls" ? new HSSFWorkbook(fileStream) : new XSSFWorkbook(fileStream);
更改後的程式碼:
using FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);//根據path建立或者開啟檔案流
await file.CopyToAsync(fileStream);//非同步地將上傳檔案的內容複製到檔案流。
fileStream.Seek(0, SeekOrigin.Begin);
//獲取檔名稱字尾
string fileExtension = file.FileName.Substring(file.FileName.LastIndexOf(".") + 1);
//二進位制轉WorkBook
IWorkbook workbook = fileExtension == "xls" ? new HSSFWorkbook(fileStream) : new XSSFWorkbook(fileStream);
增加fileStream.Seek(0, SeekOrigin.Begin);這行程式碼後即可解決。
Seek方法是用於檔案指標跳轉位置,可以讀取流的內容。
2、FileStream的示例1
示例2
先建立一個閱讀用的流,根據NPOI的類IWorkbook進行excel內容的編輯。
編輯完成後新建一個FileStream儲存檔案流,用來儲存excel到本地。
重點:一定要先寫入FileSteam再關閉ReadSteam,否則寫入時會死迴圈報錯。