2016-03-02 117 views
2

我有一個海量的SQL查詢返回4個表。我能夠返回第一個表,但不是其他表,這裏是我在下面使用的代碼。我正在使用我在網上找到的powershell腳本。我正要通過將$DataSetTable = $DataSet.Tables[0]更改爲$DataSetTable = $DataSet.Tables[1]來獲得第二張表格,第二張表格是在Excel表格中返回的,但不是第一張。將多個表結果複製到Excel

我怎麼能所有的表?

$SQLServer = 'SQLCL01' 
$Database = 'home' 
$SqlQuery = @' Query goes here'@ 

## - Connect to SQL Server using non-SMO class 'System.Data': 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $Database; Integrated Security = True" 

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = $SqlQuery 
$SqlCmd.Connection = $SqlConnection 

## - Extract and build the SQL data object '$DataSetTable': 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($DataSet) 
$DataSetTable = $DataSet.Tables[0] 

## --------- Working with Excel ------- ## 

## - Create an Excel Application instance: 
$xlsObj = New-Object -ComObject Excel.Application 

## - Create new Workbook and Sheet (Visible = 1/0 not visible) 
$xlsObj.Visible = 1 
$xlsWb = $xlsobj.Workbooks.Add() 
$xlsSh = $xlsWb.Worksheets.item(1) 

$xlsSh = $xlsWb.Worksheets.Item("Sheet1") 
$xlsSh.Name = "Back date dump" 
$xlsSh = $xlsWb.ActiveSheet 

## - Build the Excel column heading: 
[Array] $getColumnNames = $DataSetTable.Columns | Select ColumnName 

## - Build column header: 
[int] $RowHeader = 1 
foreach ($ColH in $getColumnNames) { 
    $xlsSh.Cells.item(1, $RowHeader).font.bold = $true 
    $xlsSh.Cells.item(1, $RowHeader) = $ColH.ColumnName 
    $RowHeader++ 
} 

## - Adding the data start in row 2 column 1: 
[int] $rowData = 2 
[int] $colData = 1 

foreach ($rec in $DataSetTable.Rows) { 
    foreach ($Coln in $getColumnNames) { 
    ## - Next line convert cell to be text only: 
    $xlsSh.Cells.NumberFormat = "@" 

    ## - Populating columns: 
    $xlsSh.Cells.Item($rowData, $colData) = $rec.$($Coln.ColumnName).ToString() 
    $ColData++ 
    } 
    $rowData++; $ColData = 1 
} 

## - Adjusting columns in the Excel sheet: 
$xlsRng = $xlsSH.usedRange 
$xlsRng.EntireColumn.AutoFit() 
+1

所以,'$ DataSetTable1 = $ DataSet.Tables [0];''然後$ DataSetTable2 = $ DataSet.Tables [1];'等等,然後將各種表格粘貼到不同的工作表中。 – TheMadTechnician

+0

@TheMadTechnician這是一個好主意!理想情況下,我希望數據位於相同的工作表中。我想我必須改變腳本,我在建立Excel表格 –

回答

0

遍歷集合中的所有表:

$xlsObj = New-Object -ComObject Excel.Application 
foreach ($DataSetTable in $DataSet.Tables) { 
    ... 
} 
+0

@thanks循環是一個更好的主意,但我添加了循環,我沒有得到任何結果回到Excel。這是我補充說的。你能幫助我嗎? 'foreach($ DataSetTable中的$ DataSetTable){「$ DataSetTable =」+ $ DataSetTable}' –

+0

什麼是'「$ DataSetTable =」+ $ DataSetTable'應該實現? –

+0

我不確定我是否正確使用語法。我用這個語法作爲參考'ForEach(item in collection){ScriptBlock}' –

相關問題