2012-11-01 32 views
0

我想從SQL Server表中直接選擇一個空的Excel電子表格。SELECT * INTO - > Excel工作表使用SQL Server 2008

我可以從電子表格中選擇另一個SQL Server表(請參閱下面的示例)。

我可以直接從ACCESS中選擇一個空的電子表格(請參閱下面的示例)。

但我找不到從SQL Server直接選擇到空電子表格的方式。 (我通過導入電子表格操縱大量遺留數據,操縱數據多次,然後我需要將它導出供其他需要csv文件的程序使用。現在我必須創建一箇中間步驟來拉動它進入ACCESS以將其重新轉移到Excel。我利用SELECT * INTO來格式化表格,因爲我在處理數據時對源表格進行格式化。)

感謝您的幫助。

我可以SELECT * INTO從Excel中通過下面的代碼SQL Server表:

string query = "SELECT * INTO " + tableName + " " + 
       "FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0'," + 
       "'Excel 12.0;Database=" + EXCELfilpath + ";IMEX=1'," + 
       "'SELECT * FROM ["+sheetName+"$]')"; 

我也可以從ACCESS表中選擇直接在Excel

//Select the ACCESS Table INTO an Excel Spreadsheet 
      try 
      { 
       //SELECT INTO command     
       string cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + AccfilePath + 
        ";Persist Security Info=False"; 

       ConnOpen(cnStr); 

       using (connectionToDatabase) 
       { 
        //Give the Export Table (destination) a Name 
        //baseTblName = dt.TableName; 

        //Generate the SQL string to SELECT * INTO the NEW table in destination 
        string selectcmd = "SELECT * INTO [Excel 12.0;Database="+ExfilePath+"]." + tblName + " FROM " + tblName; 


        using (OleDbCommand createCmd = new OleDbCommand(selectcmd, connectionToDatabase)) 
        { 
         createCmd.ExecuteNonQuery(); 
        } 

        ConnClose(); 
       } 
      } 

回答

1

我無法測試它,因爲64位,因爲OLE一般在你的機器上工作,這應該工作到

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 12.0;Database=C:\temp\Mappe1.xlsx;', 
'SELECT * FROM [Tabelle1$]') 
SELECT * FROM ADDR 
+0

我得到這個錯誤:提供的值的列名或數量與表定義不匹配。 – cjjeeper

+0

我認爲這回溯到SELECT * INTO與INSERT INTO。 INSERT期望現有的表。 – cjjeeper

+0

對不起,正如我告訴過你的,我再也不能測試了,我的環境是一個完整的64位(Office 32位)。我可以在辦公室明天嘗試。也許同時這將有助於? http://blog.waynesheffield.com/wayne/code-library/ad-hoc-querying/#codesyntax_5 – bummi