做了一個 Excel 2007 的範本 (*.xlsx),原本這樣載入:
using (FileStream fsIn = new FileStream(strXlsTemplate, FileMode.Open))
{
// open Excel
HSSFWorkbook workbook = new HSSFWorkbook(fsIn);
fsIn.Close();
}
結果冒出以下錯誤:
"The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)"
後來查到《java用poi操作excel .xls和.xlsx格式》,原來不同版本的 Office 要搭配不同的 NPOI 函式:
- Excel 2007 (*.xlsx):使用 XSSFWorkbook
- Excel 2003 以前 (*.xls):使用 HSSFWorkbook
【提升 NPOI 產製 Excel 效率的方式:做一份範本】
附帶一提,建議最好是先設計一份範本,不要直接畫格子、一格格設定樣式。用一格格慢慢刻的方式寫,只要資料量稍微多一點(也不過就是兩百多筆)就會慢得非常誇張,吃光測試機上的記憶體。
可以先設計範本後,利用 CopyRow() 來增加資料內容。
【特別奇妙的 NPOI:RemoveRow() 與 ShiftRows()】
覺得 NPOI 真的是個滿奇怪(奇妙?)的 library,在 NPOI 裡頭有 RemoveRow(),但不會真正的刪除整列,只會清理掉該列的資料與格式。真的要刪除一列,像我們在 Excel 裡刪除後往上移一列,要搭配 ShiftRows()。
詳情可參考這篇文章:《NPOI-真正删除行(非清空数据)的方法》。
留言列表