2016-03-26 66 views
1

我有一個2008R2服務器與SQL和IIS;沒有安裝MS-Office套裝,但是我需要根據用戶請求發送動態創建的Excel回覆。Oledb或ODBC創建沒有安裝Office的工作簿或工作表

根據規格安裝「Microsoft Access數據庫引擎2010可再發行組件」,應安裝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

嘗試使用「擴展屬性=」「Excel 12.0;」「」 – Steve

+0

@steve不夠...保持失敗。 – fcm

回答

0

如果你想創建一個空白新的Excel文件,你需要指定「的Excel XML 12.0」你擴展屬性,例如

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。我個人不喜歡。

相關問題