這裡是我的文章備份:http://www.dotblogs.com.tw/mis2000lab/archive/2011/06/09/npoi_excel_formula_value.aspx

[轉貼]NPOI,在Excel欄位裡面,取出運算的「值」而非「公式」

 

 

之前介紹過的 NPOI,對於 Excel檔的讀取、輸出 Excel file,威力都非常強大。

http://www.dotblogs.com.tw/mis2000lab/archive/2010/05/07/npoi_excel_vb_asp_net.aspx.aspx

 

 

有位網友 Steven711435 提到一個問題,並且熱情地分享解法,

特別要感謝他!!

 

Q:  讀取 Excel file的時候,某個欄位裡面有「運算公式」,

      所以讀到那個欄位,也會抓取到那一段公式?

      能否只抓取公式運算後的「值」就好了?

 

 

謝謝 Steven711435 辛苦地求解

A: 程式碼如下----

請參閱 http://www.dotblogs.com.tw/mis2000lab/archive/2010/05/07/npoi_excel_vb_asp_net.aspx.aspx

文章裡面第四個範例,

修正 61 ~ 63列的程式碼即可。

If Not row.GetCell(j) Is Nothing Then
      If row.GetCell(j).CellType = NPOI.HSSF.UserModel.HSSFCellType.FORMULA Then
            D_dataRow(j) = row.GetCell(j).StringCellValue
      Else
            D_dataRow(j) = row.GetCell(j).ToString
      End If
End If

 

 

2011/6/13補充:   有朋友反應上面的程式無法執行,以下是我今天測試的結果。

                    '-- 如果格子裡面有「計算公式」的話,只取出運算後的「值」。
                    '-- 參考資料
http://www.javadocexamples.com/org/apache/poi/hssf/usermodel/org.apache.poi.hssf.usermodel.HSSFCell.html

                    If row.GetCell(j).CellType = NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_FORMULA Then

                        D_dataRow(j) = row.GetCell(j).NumericCellValue    '-- 表示格子裡面的值是「數字」

                    Else
                        D_dataRow(j) = row.GetCell(j).ToString  '--每一個欄位,都加入同一列 DataRow
                    End If

 

另外發現一個問題,可能我的 NPOI版本為 1.21版,

所以上傳的 Excel檔案,只能到 Excel 2007版,使用 2010版的檔案會報錯。

 

 

網路,因為分享  所以偉大!

 

 

 

 

 

 



網頁上的補充範例(後續服務),不一定能立即提供 VB / C#語法(看我時間夠不夠寫,請不要跟我要)
書本上面的範例,一定有 VB / C#雙語法給您學習。

............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......

    ASP.NET 4.0 專題實務(松崗出版)

上 / 下兩集合購。優惠價1,180元(免郵資)

上集全新改寫。範例增加66%,內容增加35%。銷售半年,高達三刷

下集(第二版,黑皮書)上市一個月熱銷再刷。2010一年內熱銷四刷! 下集內容增加66%。

上下兩集將近2,000頁,堪稱國內 [最詳盡]的ASP.NET範例教學。

............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......

創作者介紹

MIS2000 Lab -- ASP.NET專題實務 / 線上教學文件

MIS2000 Lab 發表在 痞客邦 PIXNET 留言(0) 人氣()