题
有谁知道如何在 C# 中通过 OLEDB 写入 Excel 文件(.xls)?我正在执行以下操作:
OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
dbCmd.CommandTimeout = mTimeout;
results = dbCmd.ExecuteNonQuery();
但我收到一条 OleDbException 抛出消息:
“无法修改表'test $'的设计。它在只读数据库中。”
我的连接似乎很好,我可以很好地选择数据,但我似乎无法将数据插入到 Excel 文件中,有谁知道我如何通过 OLEDB 获得对 Excel 文件的读/写访问权限?
解决方案
你需要添加 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\";
其他提示
我也在寻找和答案,但 Zorantula 的解决方案对我不起作用。我找到了解决方案 http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html
我删除了 ReadOnly=false
参数和 IMEX=1
延伸财产。
这 IMEX=1
属性以导入模式打开工作簿,因此结构修改命令(例如 CREATE TABLE
或者 DROP TABLE
)不工作。
我的工作连接字符串是:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"
我也有同样的问题。只删除扩展属性 IMEX=1
. 。那会解决你的问题。您的表格将在您的 Excel 文件中创建...
- 如何检查我的应用程序写入 Excel 文件的权限(我使用的是 Excel 2007)?
- 该文件不是只读的,也不是受保护的(据我所知)。
- 我的连接字符串是:
“提供者= Microsoft.jet.oledb.4.0;数据源= FIFA_NG_DB.XLS; mode = readwrite; extended属性= 'excel 8.0; excel 8.0; hdr = yes; imex; imex = 1 “”
进一步迈克尔·哈伦的回答。如果此代码在 ASP.NET 应用程序中运行(在 IIS 应用程序池中指定),则您需要向 XLS 文件授予修改权限的帐户可能是 NETWORK SERVICE。要准确找出您的代码运行的帐户,您可以执行以下简单操作:
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
我在 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
连接字符串中的属性。
乙) 授予每个人对正在写入文件的文件夹的完全权限。通常,ASP.NET 在 NETWORK SERVICE 帐户下运行,并且该帐户已经具有权限。但是,OleDb 代码是非托管的,因此它必须在其他安全上下文下运行。(我目前懒得弄清楚是哪个帐户,所以我就使用了 EVERYONE。)