具有多个表的ImportExcel for Dataset

时间:2019-02-21 10:58:02

标签: excel powershell

我需要能够为具有多个结果\数据表的数据集创建具有多个选项卡的Excel文档。我有一个存储过程,其中有3个选择,相当简单的选择是从SQL Server的sys表中提取数据。

下面是我的脚本,我假设其中有5个表,如果有更多表,那么它将丢失,如果有更少表,则其他选项卡将为空。

遍历数据集并创建Excel文档的最佳方法是什么?

$SQLServer = 'SQL';
$Database = 'SomeDataWarehouse';
$sqlCommand = "EXEC dbo.Select_TestForPowershell";

$connectionString = "Server=$SQLServer;Database=$Database;Integrated Security=true"
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$command = New-Object System.Data.SqlClient.SqlCommand($sqlCommand, $connection)
$connection.Open()
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter $command 
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet) > null
$connection.Close()

foreach ($table in $dataset.Tables) {
    Write-Host $table.TableName
    if ($($table.TableName) -eq 'table') {$Table1 = $table}
    if ($($table.TableName) -eq 'table1') {$Table2 = $table}
    if ($($table.TableName) -eq 'table2') {$Table3 = $table}
    if ($($table.TableName) -eq 'table3') {$Table4 = $table}
    if ($($table.TableName) -eq 'table4') {$Table5 = $table}
}

$DataToGather = @{
    table  = {$Table1}
    table1 = {$Table2}
    table2 = {$Table3}
    table3 = {$Table4}
    table4 = {$Table5}
}

#Export-MultipleExcelSheets -Show -AutoSize 'C:\Temp\Test.xlsx' $DataToGather
$DataToGather

$DataToGather.Clear()

1 个答案:

答案 0 :(得分:0)

这通过使用以下代码解决。

$sqlCommand = @"
SELECT * FROM SalesLT.Address
SELECT * FROM SalesLT.Customer
SELECT * FROM SalesLT.CustomerAddress
SELECT * FROM SalesLT.Product
SELECT * FROM SalesLT.ProductCategory
SELECT * FROM SalesLT.ProductDescription
SELECT * FROM SalesLT.ProductModel
"@

$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$command = New-Object System.Data.Sqlclient.Sqlcommand($sqlCommand, $connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.SqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$null=$adapter.Fill($dataSet) 
$connection.Close()

$xlfile = "$env:TEMP\tables.xlsx"
rm $xlfile -ErrorAction SilentlyContinue

$count=1
foreach($table in $dataset.Tables) {
    $name = "Table$($count)"
    $table| Export-Excel $xlfile -WorksheetName $name -AutoSize -TableName $name
    $count+=1
}

Invoke-Item $xlfile