iT邦幫忙

1

詢問如何抓取Excel欄位為int型態

目前正在嘗試讀取上傳的Excel內容,但不管我的Excel欄位,其格式使用通用格式並輸入int值,或是直接定義此格式為整數值,但程式抓取到的型態都為Double型態,請問此部分是Excel本身的關係嗎?然後,因為丟到資料庫的欄位中必須是int型態,想詢問此部分我可以怎麼調整呢?

[Controller]

using(var reader = ExcelReaderFactory.CreateOpenXmlReader(file.InputStream)) {
    for(var i=0; reader.Read(); i++) {
        //原本想使用以下語法抓取表格上中的內容,會報例外狀況的錯誤
        //var bbb = reader.GetInt16(1);
        //抓取表格型態,發現為Double型態
        var aaa = reader.GetFieldType(1);
        
        //以下有嘗試兩種寫法:
        //1. 假設Excel欄位內容為1,則在此會抓取1.0,但希望是抓到1就好
        //var ccc = reader.GetValue(1);
        //2. 轉換為Int失敗
        //var ddd = Convert.ToInt16(aaa);
    }
}

[抓取表格型態,發現為Double型態]
https://ithelp.ithome.com.tw/upload/images/20191127/20115336zht9mlP3cA.png

[Excel]
https://ithelp.ithome.com.tw/upload/images/20191127/201153368QcKhlkNns.jpg

[轉換為Int失敗]
https://ithelp.ithome.com.tw/upload/images/20191127/20115336YjuWsKuncB.jpg

優悠 iT邦新手 3 級 ‧ 2019-11-27 14:09:16 檢舉
用MATH.Round或是MATH.Truncate,一個四捨五入,另一個只取整數(無條件捨去的意思)
anniecat iT邦新手 3 級 ‧ 2019-11-27 14:45:24 檢舉
優悠,發現它回傳的型態為Decimal,謝謝您提供的方法~
使用小魚提供的方法可以解 : Convert.ToInt32(reader.GetValue(1));
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
小魚
iT邦大師 1 級 ‧ 2019-11-27 14:24:39
最佳解答
int aaa = Convert.ToInt32(reader.GetValue(1));

話說你的for根本不需要吧,
通常用reader.Read()直接用while就可以了.

anniecat iT邦新手 3 級 ‧ 2019-11-27 14:39:53 檢舉

小魚好的,謝謝您的幫忙,嘗試以後可行,寫法的部分我再做調整~

1
YoChen
iT邦研究生 1 級 ‧ 2019-11-27 14:19:29

請嘗試看看以下語法

int myInt = (int)reader.GetValue(1);

建議您,如果上傳檔案的Excel版本都是Excel 2007以後的話,可以考慮用另一個Assembly >> ClosedXML

anniecat iT邦新手 3 級 ‧ 2019-11-27 14:39:23 檢舉

YoChen,這個方法還是會跳出例外,後來調整成小魚提供的方法可行,謝謝您~

Convert.ToInt32(reader.GetValue(1))
YoChen iT邦研究生 1 級 ‧ 2019-11-27 15:12:11 檢舉

了解,是我搞錯了~XDDD
我以為他會回傳Double,但實際上是回傳Object,那就必須用小魚大提供的方法~

我要發表回答

立即登入回答