這裡是我的文章備份: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.台灣......
上集全新改寫。範例增加66%,內容增加35%。銷售半年,高達三刷!
下集(第二版,黑皮書)上市一個月熱銷再刷。2010一年內熱銷四刷! 下集內容增加66%。
上下兩集將近2,000頁,堪稱國內 [最詳盡]的ASP.NET範例教學。
............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......
留言列表