2016-03-02 71 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}' –

相关问题