用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 TABLE
或DROP 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的,所以它必须在其他安全上下文下运行。 (我目前懒得弄清楚哪个帐户,所以我只是用了每个人。)