用OLEDB写入excel文件

时间:2008-09-12 00:10:25

标签: c# excel oledb

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

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

但是我收到一条带有消息的OleDbException:

  

“无法修改表格的设计   '测试$'。它是只读的   数据库“。

我的连接似乎很好,我可以选择数据,但我似乎无法将数据插入excel文件,有没有人知道我如何通过OLEDB读取/写入excel文件?

7 个答案:

答案 0 :(得分: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;\";"

答案 1 :(得分: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\";

答案 2 :(得分:2)

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

答案 3 :(得分:1)

几个问题:

  • 执行您的应用的用户(您?)是否有权写入该文件?
  • 文件是否为只读?
  • 你的连接字符串是什么?

如果您使用的是ASP,则需要像this example一样添加IUSER_ *用户。

答案 4 :(得分:0)

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

“提供者= Microsoft.Jet.OLEDB.4.0;数据   源= fifa_ng_db.xls;模式=读写;扩展   属性= \“创先争优   8.0; HDR =是; IMEX = 1 \ “”

答案 5 :(得分:0)

继Michael Haren的回答之后。如果此代码在ASP.NET应用程序中运行(在IIS应用程序池中指定),则需要向XLS文件授予修改权限的帐户可能是NETWORK SERVICE。要准确了解代码运行的帐户,您可以做一个简单的事情:

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

答案 6 :(得分:0)

我在ASP.NET下运行,遇到“无法修改设计...”和“找不到ISAM ...”错误消息。

我发现我需要:

a )使用以下连接字符串:

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代码是不受管理的,因此必须在其他安全上下文中运行。 (我现在太懒了,不知道哪个帐户,所以我只使用了每个人。)