我需要能够为具有多个结果\数据表的数据集创建具有多个选项卡的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()
答案 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