一、獲取模板文件中公式的返回值
如在D盤中有一個名爲text.xls的Excel文件,其內容如下:
注意C1單元格中設置的是公式“B1”,而不是值“12”。利用NPOI,只需要寫簡單的幾句代碼就可以取得此公式的返回值:
HSSFWorkbook wb = new HSSFWorkbook(new FileStream("d:/test.xls",FileMode.Open));
HSSFCell cell = wb.GetSheet("Sheet1").GetRow(0).GetCell(2);
System.Console.WriteLine(cell.NumericCellValue);
輸出結果爲:
可見NPOI成功的“解析”了此.xls文件中的公式。注意NumericCellValue屬性會自動根據單元格的類型處理,如果爲空將返0,如果爲數值將返回數值,如果爲公式將返回公式計算後的結果。單元格的類型可以通過CellType屬性獲取。
二、獲取NPOI生成的Excel文件中公式的返回值
上例中是從一個已經存在的Excel文件中獲取公式的返回值,那麼如果Excel文件是通過NPOI創建的,直接用上面的方法獲取,可能得不到想要的結果。如:
複製代碼
1 HSSFWorkbook hssfworkbook = new HSSFWorkbook();
2 HSSFSheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
3 HSSFRow row = sheet1.CreateRow(0);
4 row.CreateCell(0).SetCellValue(3);
5 row.CreateCell(1).SetCellValue(4);
6 HSSFCell cell = row.CreateCell(2);
7
8 cell.SetCellFormula("$A1+$B1");
9 System.Console.WriteLine(cell.NumericCellValue);
複製代碼
執行上面代碼,將輸出結果“0”,而不是我們想要的結果“7”。那麼將如何解決呢?這時要用到HSSFFormulaEvaluator類。在第8行後加上這兩句就可以了:
HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(hssfworkbook);
cell = e.EvaluateInCell(cell);
運行結果如下: