上網查了一下連接字串大概是這樣寫的
【Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"】
這一篇對於連接字串的說明說的比較詳細【透過 OleDb 精準讀入 Excel 檔的方法】
所以我就依樣畫葫蘆建立一個 OleDbConnection 的變數開始連接 Excel 吧!
程式如下:
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR={1};IMEX=1\"";
connString = string.Format(connString, fileName, hasHeader ? "Yes" : "No");
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
原本以為這樣就結束了,沒想到卻出現了下面這個錯誤訊息!
阿咧!這是甚麼鬼丫!
寫程式這麼久,從來沒看過這樣的錯誤!
【Microsoft.Jet.OLEDB】不是作業系統提供的嗎?
不然裝了 Office 應該也會有才對丫?
馬上查了一下我電腦的 ODBC 裡面居然空空如也!
這.....這.....這.....這.....
打從我有看過 ODBC 以來,從來沒看過這麼空的丫!
我不信邪!馬上打開我的虛擬的XP看一看!
很多嘛!而且滿滿滿的....
然後在XP測試了一下我的程式,
OK的~~~是可以跑的嘛!
只好繼續孤狗了,找到了這篇文章,
【Microsoft.Jet.OLEDB.4.0 提供者並未登錄於本機電腦上】
原來是 Microsoft Jet 沒有 64 位元的 Driver 丫!
恩恩~~~我的 NB 是 Win7 64 的版本!
所以程式要編譯成 32 位元的喔!
感覺好鳥喔!不過還是照著做一遍吧!
結果咧、結果咧.....
看來是整個方案都要編譯成 32 位元的才可以,
不可以單一個 dll 編譯成 32 位元,這樣程式根本無法把這個 32 位元的 dll 給載入!
果然夠鳥~~~
繼續孤狗~~~然後找到了這篇
【Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine】
恩~~~微軟已經出了 64 位元的 Driver 了!
喔耶!趕快去下載來裝裝!下載網址如下:
【Microsoft Access Database Engine 2010 可轉散發套件】
記得抓 64 位元的喔!
但是衰咖總是不會有順利的一天!
安裝的時候又跳出了一個對話視窗!
阿咧!是要我移除我的 Office 嗎?
只好摸摸鼻子把我的 Office 移除.....
然後最後終於可以安裝啦!
裝好之後我的 ODBC 果然就出現了這些可愛的 Driver 嚕!
然而衰咖不愧是衰咖!
程式還是出現了一樣的錯誤訊息!
這時候已經不自覺的開口了!
只能繼續孤狗!孤狗真是衰咖工程師的好朋友丫!(無誤)
然後又找到這篇
【遭遇錯誤: Msg 7308、Msg 7320、Msg 7415(訊息 7302、訊息 7308、訊息 7415);以使用 OPENROWSET 與 OPENDATASOURCE 函數為例】
看來是連接字串要修改,
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR={1};IMEX=1\"";
改成這樣之後用 OleDB 開 Excel 看起來就沒有問題啦!
這篇的衰咖之路就到此為止吧!
只是為了開啟 Excel 我的電腦沒 Office 了耶!
讚!!! 若能早點看到這篇文章...就可以省了很多白工
回覆刪除感謝大大無私的分享
人還是要夠衰才可以這樣一路錯到底的!(無誤)
回覆刪除THANKS A LOT, VERY HELPFUL TO ME.
回覆刪除