2013年5月14日 星期二

{C#} NPOI 進階-讀Excel 儲存格公式 取其結果方法

Excel的公式有很多種,有
1.日期型的公式
2.字串組合變化公式
3.純數值(儲存格數值)加總等公式
4.其他(還沒想到)

ps.NPOI版本為2.0
NPOI讀取公式類型的儲存格,其依以上不同而有不同的寫法

//每一格儲存格的資料類型為公式
//EX:Date('2010','4','1')、Sum($A1,$A2)、$A1 & $A2
if(hssfRow.GetCell(k).CellType==CellType.FORMULA)
{
     //由NPOI內提供的類別庫判斷公式結果類型

     IFormulaEvaluator iFormula = WorkbookFactory.CreateFormulaEvaluator(workbook);
     var formulaType = iFormula.Evaluate(hssfRow.GetCell(k)).CellType;
    //結果類型為數值(日期結果會被轉為數值)
     if (formulaType == CellType.NUMERIC)
    {
        ICell cell = iFormula.EvaluateInCell((hssfRow.GetCell(k)));
        // 判斷是否日期
         if (DateUtil.IsCellDateFormatted(cell))
           dr[k] = hssfRow.GetCell(k).DateCellValue;
         else
           dr[k] = hssfRow.GetCell(k).NumericCellValue;
    }
    //字串公式
    else if (formulaType == CellType.STRING)
       dr[k] = hssfRow.GetCell(k).StringCellValue;
    else
       dr[k] = hssfRow.GetCell(k).ToString();

}


參考資訊:
http://www.dotblogs.com.tw/smartleos/archive/2010/10/11/18284.aspx
http://tonyqus.sinaapp.com/archives/tag/excel-2007