有没有人知道如何通过C#中的OLEDB写入excel文件(.xls)?我正在做以下事情:
OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
dbCmd.CommandTimeout = mTimeout;
results = dbCmd.ExecuteNonQuery();
但是我收到一条带有消息的OleDbException:
“无法修改表格的设计 '测试$'。它是只读的 数据库“。
我的连接似乎很好,我可以选择数据,但我似乎无法将数据插入excel文件,有没有人知道我如何通过OLEDB读取/写入excel文件?
答案 0 :(得分:14)
我也在寻找和回答,但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;\";"
答案 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)
答案 4 :(得分:0)
“提供者= 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代码是不受管理的,因此必须在其他安全上下文中运行。 (我现在太懒了,不知道哪个帐户,所以我只使用了每个人。)