用OLEDB写入excel文件

有谁知道如何通过在C#中的OLEDB写入Excel文件(.xls)? 我正在做以下事情:

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

但是我得到一个OleDbException抛出的消息:

“不能修改表'test $'的devise,它是在一个只读数据库中。”

我的连接看起来不错,我可以select数据正常,但我似乎无法插入数据到Excel文件,有没有人知道我如何获得通过OLEDB的Excel文件的读/写访问?

你需要添加ReadOnly=False; 到你的连接string

 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\"; 

我也在寻找和回答,但Zorantula的解决scheme没有为我工作。 我在http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.htmlfind了解决scheme

我删除了ReadOnly=false参数和IMEX=1扩展属性。

IMEX=1属性以导入模式打开工作簿,因此结构修改命令(如CREATE TABLEDROP TABLE )不起作用。

我的工作连接string是:

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

我也有同样的问题。 只删除扩展属性IMEX=1 。 这将解决您的问题。 您的表格将在您的Excel文件中创build…

几个问题:

  • 执行您的应用程序的用户(您?)是否有权写入文件?
  • 该文件是只读的吗?
  • 你的连接string是什么?

如果您使用的是ASP,则需要像本例中那样添加IUSER_ *用户。

  • 如何检查写入我的应用程序的Excel文件的权限(我正在使用Excel 2007)?
  • 该文件不是只读,或保护(据我所知)。
  • 我的连接string是:

“Provider = Microsoft.Jet.OLEDB.4.0; Data Source = fifa_ng_db.xls; Mode = ReadWrite; Extended Properties = \”Excel 8.0; HDR = Yes; IMEX = 1 \“”

迈克尔·哈伦的回答。 如果此代码在ASP.NET应用程序(在IIS应用程序池中指定)中运行,则您需要授予对XLS文件“修改”权限的帐户可能为NETWORK SERVICE。 要找出你的代码运行的是什么帐户,你可以做一个简单的:

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

我在ASP.NET下运行,并遇到“无法修改devise…”和“无法findISAM …”错误消息。

我发现我需要:

a )使用以下连接string:

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

注意我也有IMEX=1和连接string中的ReadOnly=false属性的问题。

b )将EVERYONE完全权限授予正在写入文件的文件夹。 通常情况下,ASP.NET运行NETWORKSERVICE帐户下,并已拥有权限。 但是,OleDb代码是非托pipe的,所以它必须在其他安全上下文下运行。 (我目前懒得弄清楚哪个帐户,所以我只是用了每个人。)