代码之家  ›  专栏  ›  技术社区  ›  Danielb

用OLEDB写入excel文件

  •  8
  • Danielb  · 技术社区  · 18 年前

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

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

    但我得到一个OLEDBEException抛出的消息:

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

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

    7 回复  |  直到 18 年前
        1
  •  14
  •   Siddharth Rout    14 年前

    我也在寻找答案,但佐兰图拉的解决方案并不适合我。 我找到了解决办法 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;\";"
    
        2
  •  8
  •   Siddharth Rout    14 年前

    您需要添加 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\";
    
        3
  •  2
  •   Siddharth Rout    14 年前

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

        4
  •  1
  •   shsteimer    18 年前

    有几个问题:

    • 你的连接字符串是什么?

    如果您使用的是ASP,则需要添加IUSER_*用户,如中所示 this example

        5
  •  0
  •   Danielb    18 年前
    • 据我所知,该文件不是只读的或受保护的。
    • 我的连接字符串是:

    来源=fifa_ng_db.xls;模式=读写;延伸 属性=\“Excel 8.0;HDR=是;IMEX=1“

        6
  •  0
  •   Duncan Smart    17 年前

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

    Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
    
        7
  •  0
  •   Siddharth Rout    14 年前

    我在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 )向所有人授予写入文件的文件夹的完全权限。通常,ASP.NET在网络服务帐户下运行,该帐户已具有权限。但是,OleDb代码是非托管的,因此必须在其他安全上下文下运行。(我现在懒得弄清楚是哪个帐户,所以我只使用了所有人。)