天天看點

未在本地計算機上注冊"Microsoft.Jet.OLEDB.4.0"

答案一:

因為沒有安裝64位的Jet40驅動。可以到

http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d 下載下傳。但是前提你必須安裝了64位的Office。

如果你安裝的是32位Office,則下載下傳32位驅動。但同時你必須将你的應用程式将原有的AnyCPU更改為CPU x86.

如果是Web端程式,可以通過IIS的應用程式池進行配置。将【啟用32位應用程式】啟用即可。

答案二:

項目中要把資料導出到 Excel 檔案的功能。 如果使用 Excel.Application/Excel.Workbook/Excel.Worksheet 那個體系去處理的話。 我就是要輸出一個無格式的 Excel 資料檔案,花費時間太長。 代碼寫起來也複雜。

于是就使用 String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";Extended Properties=Excel 8.0;"; OleDbConnection cn = new OleDbConnection(sConnectionString); string sqlCreate =     @"CREATE TABLE [Sheet名] ([列1] VarChar, [列2] VarChar, [列3] VarChar, [列4] Int)"; OleDbCommand cmd = new OleDbCommand(sqlCreate, cn); //建立Excel檔案 cn.Open(); //建立表 cmd.ExecuteNonQuery();

String queryString =     String.Format("INSERT INTO [Sheet名] ([列1], [列2], [列3], [列4]) VALUES ('{0}', '{1}', '{2}', {3})",         "Test1",         "Test2",         "Test3",         4); // 插入. icmd.CommandText = queryString; icmd.ExecuteNonQuery();

這種簡單的方式處理。

但是自己機器上運作正常,但是跑到别人電腦上面運作,就出錯了。 未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0”提供程式。

首先是考慮到,我的機器是Office 2007,目标機器上的是 Office 2010. 會不會是 Microsoft.Jet.OLEDB.4.0 太老了? 新版本的不支援。

于是修改一下 String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";Extended Properties=Excel 8.0;"; 修改為 String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";

然後依然是本機能夠正常運作,目标機器不行。

再去仔細了解一下,發現目标機器是 64位系統的。

看文章顯示,Microsoft.ACE.OLEDB.12.0 是不能再x64上使用的。 于是再回到 開發工具那裡,在項目的 “屬性”那裡, 目标平台由原有的“Any CPU” 修改為 “x86” 重新編譯完畢後,再放回目标機器上面測試,終于正常運作了。

再回頭去看看 在 x86 的情況下, 使用 Jet 或者 ACE ,都能在 64位的作業系統,安裝了 Office 2010的機器上,正常的建立 Excel 報表。

2011年4月13日 追加

使用 Microsoft.Jet.OLEDB.4.0; 如果 Excel 檔案名 的擴充名為 xlsx

那麼代碼運作過程中,會報  “不能更新。資料庫或對象為隻讀。” 的錯誤。

如果使用 Microsoft.ACE.OLEDB.12.0,擴充名為 xlsx 的時候則不産生錯誤。

是以,C#産生報表的時候,優先使用 Microsoft.ACE.OLEDB.12.0 驅動, 當目标機器無法啟用 Microsoft.ACE.OLEDB.12.0 的時候,才使用 Microsoft.Jet.OLEDB.4.0 驅動 。

2011年6月8日追加

上面的驅動,能夠成功的建立 xlsx 檔案,但是用 Excel 打開的時候,會提示錯誤資訊。

驅動需要修改為:

sConnectionString  = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="  + excelFileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

注意

修改的地方 Extended Properties=\"Excel 12.0 Xml;HDR=YES\"

與以前的  Extended Properties=Excel 8.0

僅僅當擴充名為   xlsx  的時候, 才使用上面那個驅動的寫法。

如果擴充名還是  xls  那麼還是繼續使用 原有的寫法,也就是那個 Extended Properties=Excel 8.0 的

[轉載:http://hi.baidu.com/wangzhiqing999/item/48d316fbe631c6e41a111f29]