Oledb或ODBC创建没有安装Office的工作簿或工作表

时间:2016-03-26 23:19:29

标签: vb.net excel odbc oledb oledbconnection

我有一台带有SQL和IIS的2008R2服务器;没有安装MS-Office套装,但我需要根据用户请求发送动态创建的Excel回复。

安装了“Microsoft Access数据库引擎2010 Redistributable”,根据规范,Excel驱动程序(以及其他)应该就位。

尝试使用以下连接字符串创建新数据库:

    Using ExcelConnection As New System.Data.OleDb.OleDbConnection(
          "Provider=Microsoft.ACE.OLEDB.12.0;" +
          "Data Source=" + Name + ";" +
          "Mode=ReadWrite;" +
          "ReadOnly=false;" +
          "Extended Properties=Excel 12.0;")
        ExcelConnection.Open()
    ....
    end Using

错误

  [OleDbException (0x80004005): Could not find installable ISAM.]
  System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +318
  System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +88
  System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +24
  ....

删除Mode=ReadWrite;ReadOnly=false;失败并显示其他错误:

OleDbException (0x80004005): Cannot update.  Database or object is read-only.]
   System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +318
   System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions .....

输出目录安全性允许无限制地创建。

如果我有一个'模板',我可以复制它并使用它。所以:不允许创建,但是读/写是。

请不要建议将CSV,第三方软件或其他任何形式的Excel工作簿与一个或多个工作表一起使用。

对不起我的语言:我精通C#,但更喜欢用VB编写......

1 个答案:

答案 0 :(得分:0)

如果要创建一个空白的新Excel文件,则需要指定" Excel 12.0 XML"在您的扩展属性中,例如

Using ExcelConnection As New System.Data.OleDb.OleDbConnection(
      "Provider=Microsoft.ACE.OLEDB.12.0;" +
      "Data Source=" + Name + ";" +
      "Extended Properties=Excel 12.0 XML;")
    ExcelConnection.Open()
End Using

此外,请注意,在您添加至少一张表格之前,Excel文件将不会完整...

Using ExcelCommand As New System.Data.OleDb.OleDbCommand("Create Table [Sheet1] (Column1 Int)", ExcelConnection)
    ExcelCommand.ExecuteNonQuery()
End Using

但是,在您从其他地方复制模板之后,阅读现有文件会要求您使用不同的扩展属性......

Using ExcelConnection As New System.Data.OleDb.OleDbConnection(
      "Provider=Microsoft.ACE.OLEDB.12.0;" +
      "Data Source=" + Name + ";" +
      "Extended Properties=""Excel 12.0;HDR=No;IMEX=1"""
    ExcelConnection.Open()
End Using

您可能有标题,在这种情况下指定HDR =是。我个人不喜欢。