2011年5月10日 星期二

.net excel

這天為了快樂的在程式中使用excel
開心的使用了ADO.NET的Microsoft.Jet.OleDb
哇讀取excel真方便啊
しかぁぁぁぁし
卻發生了有資料不見的情況= =
原來是用OleDb的寫法
系統只會去偵測前8列的欄位型態
會碰到如果前8列的A欄位為皆為數字,當第9列後A欄位為文字時,則會無法辦別而讀到NULL
可用HDR=NO;IMEX=1;解決
(HDR)使EXCEL中第一列欄位名當作內容用,(IMEX)當欄位為混合型態時以文字型態優先(也是只檢查前8列= =)
雖然有人提出改機碼的方法使偵測值為0
但我還是不滿足
所以我找了NPOI

幸運的是裡面有別人寫好的method可以用
不幸的是COPY過來後出現了
您是否漏掉了轉型?

這是因為我download的是1.2.3版
而範例的似乎是1.2.2版
所造成版本不符的關係
解決方法是強制轉型
HSSFSheet sheet = (HSSFSheet)workbook.GetSheet(SheetName);

使用範例提供的excelToDataTable
就沒有再發生掉資料的問題囉
めでたしめでたし~


--
參考網址
http://www.dotblogs.com.tw/puma/archive/2008/03/16/1652.aspx
http://bgm.pixnet.net/blog/post/21031912
http://sanchen.blogspot.com/2007/08/imex1-oledb-excel-null.html
http://club.excelhome.net/thread-488632-1-6.html
http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/e396290a-cded-43fb-9a9f-d05b107a6e06/

沒有留言:

張貼留言