ImportExcel для набора данных с несколькими таблицами - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно иметь возможность создать документ Excel с несколькими вкладками для набора данных с несколькими таблицами результатов \ данных.У меня есть хранимая процедура с 3-мя выборами, довольно простыми, которые извлекают данные из таблиц sys в SQL Server.

Ниже приведен мой сценарий, где я предполагаю, что будет 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 голосов
/ 16 мая 2019

Это было решено с помощью приведенного ниже кода.

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...