2010-07-04 83 views
0

我在Excel文檔中看到了QueryTables集合和ODBCConnection對象,但沒有在PowerShell中如何使用它們。Windows Powershell 2.0 - 如何將ODBC從系統DSN讀取到Excel 2007工作表

我想創建一個帶有單個工作表的新工作簿,連接到系統DSN(不需要登錄/ passowrd),並運行「SELECT * FROM someTable」,並將結果放入工作表中。 Excel是2007年; powershell是2.0; odbc連接是一個系統DSN。

感謝

回答

0

爲Excel部分,你可以使用新的對象cmdlet與-COM參數來實例化一個Excel工作表:

$xl = New-Object -Com Excel.Application 
$xl.Visible = $true 
$wb = $xl.Workbooks.Add() 
$ws = $wb.Worksheets.Item(1) 
$ws.Cells.Item(1,1) = 1 

然後對數據庫的訪問我會用一個.NET DB訪問層(PowerShell可以很容易地訪問.NET)。有關詳細信息,請參閱這兩部分文章(part onepart two)。

+0

感謝您的指針一樣簡單;謝爾頓的文章看起來很有幫助。 對於這個項目,我希望有一種更簡單的方法,沒有ADO或數據表。我希望能找到一種方法來使用Powershell中的Excel對象來模擬Excel的交互式使用 - 指定數據源,指定數據目標左上角的單元格,然後運行查詢。我需要的僅僅是在Sheet 1的單元格A1中放入「select * from sometable」,並將工作簿保存爲名稱。 但是,你給的鏈接,我很高興有。 – TortTupper 2010-07-05 02:14:50

+0

它使用ado方法將數據複製到excel中,並寫入Cells.Item(x,y),但是一次只能移動一個單元太慢。所以我認爲我得到了一個不同的問題 - 我可以在一個鏡頭中將odbc數據集中的DataTable寫入Excel中嗎?而且事情會如我所預期的那樣變快嗎?我認爲我的其他選擇是編寫一個VBA宏,它在電子表格中設置值,或者將數據提交給某些中間形式 - csv或xml - excel可以讀取,但我堅持希望我可以做到這一切幾行powershell。 – TortTupper 2010-07-05 13:21:03

+0

使用Excel Range對象進行研究,該對象可讓您在單個語句中插入多個單元格(假設該值爲二維數組)。 – 2010-07-06 21:54:03

0

我會繼續走基思去的路。
在Excel中記錄宏並在工作表中插入數據連接以繪製表格。錄製的宏中的代碼將使用上述方法直接指向您需要將表插入到工作表中的對象和方法,這些對象和方法直接來自Powershell。

+0

這是有希望的,但我還沒有打payrit。首先我想要的是一個listobject。 Worksheet.listobjects.add()可以接受一個DataSourceType,這裏有一個枚舉,我相信我想要的是[Microsoft.Office.Interop.Excel.XlListObjectSourceType] :: xlSrcExternal。我想我必須在指定xlSrcExternal的同時添加連接字符串,並且找不到語法。 如果我使用XlListObjectSourceType xlSrcRange,則Listobject.Add()調用成功;如果我使用xlSrcExternal,它將失敗(並顯示消息「The parameter is incorrect」) – TortTupper 2010-07-11 22:38:17

1

對我來說,竟然是因爲(與$ WS作爲工作表)

 
$qt = $ws.QueryTables.Add("ODBC;DSN=favoriteDSN", ws.Range("A1"), "SELECT * FROM faveTable") 
$qt.Refresh() 
$wb.SaveAs("H:\favoriteNewFile.xlsx") 
相關問題