8

有谁知道如何在 C# 中通过 OLEDB 写入 excel 文件(.xls)?我正在执行以下操作:

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

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

“无法修改表 'test$' 的设计。它位于只读数据库中。”

我的连接似乎很好,我可以很好地选择数据,但我似乎无法将数据插入到 excel 文件中,有谁知道我如何通过 OLEDB 获得对 excel 文件的读/写访问权限?

4

7 回答 7

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;\";"
于 2009-04-23T10:49:35.653 回答
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\";
于 2008-10-08T18:38:27.583 回答
2

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

于 2011-08-04T20:16:02.627 回答
1

几个问题:

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

如果您使用的是 ASP,则需要添加 IUSER_* 用户,如本例所示

于 2008-09-12T02:04:24.797 回答
0
  • 如何检查我的应用程序写入 excel 文件的权限(我使用的是 excel 2007)?
  • 该文件不是只读的,也不是受保护的(据我所知)。
  • 我的连接字符串是:

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

于 2008-09-12T16:12:37.907 回答
0

继迈克尔·哈伦的回答之后。如果此代码在 ASP.NET 应用程序中运行(在 IIS 应用程序池中指定),则您需要授予对 XLS 文件修改权限的帐户可能是 NETWORK SERVICE。要准确了解您的代码运行的帐户,您可以执行以下简单操作:

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
于 2008-10-08T18:49:51.897 回答
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=1ReadOnly=false属性有疑问。

b ) 授予每个人对正在写入文件的文件夹的完全权限。通常,ASP.NET 在 NETWORK SERVICE 帐户下运行,并且该帐户已经具有权限。但是,OleDb 代码是非托管的,因此它必须在其他一些安全上下文中运行。(我目前懒得弄清楚哪个帐户,所以我只使用了每个人。)

于 2009-06-10T16:11:17.943 回答