2008-09-12 125 views
8

有誰知道如何通過OLEDB在C#中寫入excel文件(.xls)嗎?我做了以下內容:用OLEDB寫入excel文件

OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection); 
    dbCmd.CommandTimeout = mTimeout; 
    results = dbCmd.ExecuteNonQuery(); 

,但我得到一個OleDbException拋出與消息:

「無法修改表 ‘測試$’設計它是一個只讀的 數據庫。」

我的連接似乎很好,我可以選擇的數據不錯,但我似乎無法將數據插入到Excel文件,沒有人知道我是怎麼讀通過OLEDB Excel文件/寫訪問?

+0

工作簿是否已經有一個名爲test $的工作表? – Kearns 2008-10-07 18:53:57

回答

8

您需要添加ReadOnly=False;到連接字符串

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fifa_ng_db.xls;Mode=ReadWrite;ReadOnly=false;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"; 
+7

不太正確 - 使用ReadOnly屬性會導致錯誤「System.Data.OleDb.OleDbException:找不到可安裝的ISAM」。正是IMEX = 0阻止文件被只讀。對我來說(C#)的字符串是:@「Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {0}; Mode = ReadWrite; Extended Properties =」「Excel 8.0; HDR = YES; MaxScanRows = 0; IMEX = 0 「」;「; – rohancragg 2010-10-04 15:20:33

1

幾個問題:

  • 這是否執行您的應用程序用戶(你呢?)有寫權限的文件?
  • 該文件是否只讀?
  • 什麼是您的連接字符串?

如果您使用ASP,您需要添加IUSER_ *用戶在this example

0
  • 如何檢查寫入我的應用程序的excel文件(我使用的是excel 2007)的權限?
  • 該文件不是隻讀,或保護(據我所知)。
  • 我的連接字符串是:

「供應商= Microsoft.Jet.OLEDB.4.0;數據源 = fifa_ng_db.xls;模式=讀寫;擴展 屬性= \」 Excel中 8.0,HDR =是; IMEX = 1 \ 「」

+0

通過右鍵單擊它並點擊安全或權限選項卡來檢查權限。 Excel文件在連接時是否關閉? – 2008-09-13 03:28:30

+0

您應該嘗試使用IMEX = 0 – rohancragg 2010-10-04 15:23:42

0

除了邁克爾哈倫的回答。如果此代碼在ASP.NET應用程序中運行(它在IIS應用程序池中指定),則您需要授予對XLS文件「修改」權限的帳戶可能爲NETWORK SERVICE。要搞清楚佔你的代碼作爲運行,你可以做一個簡單:

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName); 
14

我也一直在尋找和答案,但Zorantula的解決方案並沒有爲我工作。 我找到了解決方案http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html

我刪除了ReadOnly=false參數和IMEX=1擴展屬性。

IMEX=1屬性以導入模式打開工作簿,因此結構修改命令(如CREATE TABLEDROP TABLE)不起作用。

我的工作連接字符串是:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";" 
0

我ASP.NET下運行,並且遇到這兩種「不能修改設計...」和「無法找到的ISAM ...」錯誤消息。

我發現我需要:

一個)使用下面的連接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};

注意我也曾經有過的問題與IMEX=1和與連接字符串中的ReadOnly=false屬性。

b)將EVERYONE的所有權限授予寫入文件的文件夾。通常情況下,ASP.NET在NETWORK SERVICE帳戶下運行,並且已具有權限。但是,OleDb代碼是非託管的,所以它必須在其他安全上下文下運行。 (我目前懶得弄清楚哪個帳戶,所以我只是用過每個人。)

2

我也有同樣的問題。只刪除擴展屬性IMEX=1。這將解決你的問題。您的表格將在Excel文件中創建...