2015年12月30日 星期三

糟糕!使用NPOI操作Excel文件當機了

NPOI是Apache License 2.0的開放原始碼函式庫,提供.NET程式開發人員在無安裝Microsoft Office的環境下,讀取和操作Office 97-2007文件。

問題說明:

當我們使用CreateSheet方法去創建一組新的工作表,如下面的程式碼:
       HSSFWorkbook Workbook;   
       Workbook = new HSSFWorkbook();
       Workbook.CreateSheet("Sheet1");
       ISheet sheet = Workbook.GetSheetAt(0);

如果使用了下面的方法讀取工作表的row或cell的資料時,
出現嚴重的Exception而無法知道原因!

例如:
                IRow row;
                row = sheet.GetRow(0);
                if (row == null)
                    row = sheet.CreateRow(0);

解決方法:
當工作表使用CreateSheet("Sheet1")方法產生時,不能使用sheet.GetRow(0)的方法,必須直接使用CreateRow(0)的方法;對於Cell的操作也是一樣,否則伺服器會完全當機!

正確的方法如下:
IRow row = sheet.CreateRow(0);
ICell cell = row.CreateCell(0);

※記住了:在NPOI元件下使用CreateSheet()方法產生的工作表,初次操作row或cell時,要直接使用CreateRow或CreateCell,不能習慣性地先讀取row或cell再判斷是否為nll的方式!