Oledb或ODBC在未安装Office的情况下创建工作簿或工作表



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

安装了"Microsoft Access Database Engine 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编写…

如果您想创建一个空白的新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=Yes。就我个人而言,我不喜欢。

相关内容

最新更新