Powershell – 将三个select语句输出到三个EXCEL工作表

我有代码可以读取一个SQL SELECT语句的输出到工作表并保存它。

现在我正在尝试创build三个select语句并将其导出到EXCEL中的三个工作表中。

不幸的是,代码仅从第一个SELECT语句中提取输出,并将其存储到第一个EXCEL表单中

# SQL string with multiple SELECT statements $SQL = "SELECT Statement 1 SELECT Statement 2 SELECT Statement 3" # Create Excel file to save the data if (!(Test-Path -path "$DirectoryToSave")) #create it if not existing { New-Item "$DirectoryToSave" -type directory | out-null } $excel = New-Object -Com Excel.Application $excel.Visible = $True $wb = $Excel.Workbooks.Add() $currentWorksheet=1 if ($currentWorksheet -lt 4){ $ws = $wb.Worksheets.Item($currentWorksheet) } else { $ws = $wb.Worksheets.Add() } $currentWorksheet += 1 $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL) if ($qt.Refresh()){ $ws.Activate() $ws.Select() $excel.Rows.Item(1).HorizontalAlignment = $xlCenter $excel.Rows.Item(1).VerticalAlignment = $xlTop $excel.Rows.Item("1:1").Font.Name = "Calibri" $excel.Rows.Item("1:1").Font.Size = 11 $excel.Rows.Item("1:1").Font.Bold = $true $Excel.Columns.Item(1).Font.Bold = $true } $filename = "D:\Script\Database_stuff.xlsx" if (test-path $filename ) { rm $filename } $wb.SaveAs($filename, $xlOpenXMLWorkbook) #save as an XML Workbook (xslx) $wb.Saved = $True #flag it as being saved $wb.Close() #close the document $Excel.Quit() #and the instance of Excel $wb = $Null #set all variables that point to Excel objects to null $ws = $Null #makes sure Excel deflates $Excel=$Null #let the air out 

我怎么甚至谷歌解决这个问题? 谢谢!

UPDATE

解决scheme为短期

 SQL1 = "SELECT Statement 1" SQL2 = "SELECT Statement 2" SQL3 = "Select Statement 3" if (!(Test-Path -path "$DirectoryToSave")) #create it if not existing { New-Item "$DirectoryToSave" -type directory | out-null } $excel = New-Object -Com Excel.Application $excel.Visible = $True $wb = $Excel.Workbooks.Add() $currentWorksheet=1 $ws = $wb.Worksheets.Item(1) $ws.name = "GUP Download Activity" $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL1) if ($qt.Refresh()){ $ws.Activate() $ws.Select() $excel.Rows.Item(1).HorizontalAlignment = $xlCenter $excel.Rows.Item(1).VerticalAlignment = $xlTop $excel.Rows.Item("1:1").Font.Name = "Calibri" $excel.Rows.Item("1:1").Font.Size = 11 $excel.Rows.Item("1:1").Font.Bold = $true } $ws = $wb.Worksheets.Item(2) $ws.name = "Distinct" $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL2) if ($qt.Refresh()){ $ws.Activate() $ws.Select() $excel.Rows.Item(1).HorizontalAlignment = $xlCenter $excel.Rows.Item(1).VerticalAlignment = $xlTop $excel.Rows.Item("1:1").Font.Name = "Calibri" $excel.Rows.Item("1:1").Font.Size = 11 $excel.Rows.Item("1:1").Font.Bold = $true } $ws = $wb.Worksheets.Item(3) $ws.name = "Computers in GUP Downloads" $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL3) if ($qt.Refresh()){ $ws.Activate() $ws.Select() $excel.Rows.Item(1).HorizontalAlignment = $xlCenter $excel.Rows.Item(1).VerticalAlignment = $xlTop $excel.Rows.Item("1:1").Font.Name = "Calibri" $excel.Rows.Item("1:1").Font.Size = 11 $excel.Rows.Item("1:1").Font.Bold = $true } $filename = "D:\Script\Daily_GUP_Report.xlsx" if (test-path $filename ) { rm $filename } $wb.SaveAs($filename, $xlOpenXMLWorkbook) #save as an XML Workbook (xslx) $wb.Saved = $True #flag it as being saved $wb.Close() #close the document $Excel.Quit() #and the instance of Excel $wb = $Null #set all variables that point to Excel objects to null $ws = $Null #makes sure Excel deflates $Excel=$Null #let the air out 

你不应该取代这个:

 $SQL = "SELECT Statement 1 SELECT Statement 2 SELECT Statement 3" 

有了这个?:

 $SQL = "SELECT Statement 1 UNION ALL SELECT Statement 2 UNION ALL SELECT Statement 3" 

我不明白三个工作表的问题,但? 为什么不是一个简单的循环或一个将采取声明和工作表作为参数的子?

解决scheme为短期

 SQL1 = "SELECT Statement 1" SQL2 = "SELECT Statement 2" SQL3 = "Select Statement 3" if (!(Test-Path -path "$DirectoryToSave")) #create it if not existing { New-Item "$DirectoryToSave" -type directory | out-null } $excel = New-Object -Com Excel.Application $excel.Visible = $True $wb = $Excel.Workbooks.Add() $currentWorksheet=1 $ws = $wb.Worksheets.Item(1) $ws.name = "GUP Download Activity" $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL1) if ($qt.Refresh()){ $ws.Activate() $ws.Select() $excel.Rows.Item(1).HorizontalAlignment = $xlCenter $excel.Rows.Item(1).VerticalAlignment = $xlTop $excel.Rows.Item("1:1").Font.Name = "Calibri" $excel.Rows.Item("1:1").Font.Size = 11 $excel.Rows.Item("1:1").Font.Bold = $true } $ws = $wb.Worksheets.Item(2) $ws.name = "Distinct" $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL2) if ($qt.Refresh()){ $ws.Activate() $ws.Select() $excel.Rows.Item(1).HorizontalAlignment = $xlCenter $excel.Rows.Item(1).VerticalAlignment = $xlTop $excel.Rows.Item("1:1").Font.Name = "Calibri" $excel.Rows.Item("1:1").Font.Size = 11 $excel.Rows.Item("1:1").Font.Bold = $true } $ws = $wb.Worksheets.Item(3) $ws.name = "Computers in GUP Downloads" $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL3) if ($qt.Refresh()){ $ws.Activate() $ws.Select() $excel.Rows.Item(1).HorizontalAlignment = $xlCenter $excel.Rows.Item(1).VerticalAlignment = $xlTop $excel.Rows.Item("1:1").Font.Name = "Calibri" $excel.Rows.Item("1:1").Font.Size = 11 $excel.Rows.Item("1:1").Font.Bold = $true } $filename = "D:\Script\Daily_GUP_Report.xlsx" if (test-path $filename ) { rm $filename } $wb.SaveAs($filename, $xlOpenXMLWorkbook) #save as an XML Workbook (xslx) $wb.Saved = $True #flag it as being saved $wb.Close() #close the document $Excel.Quit() #and the instance of Excel $wb = $Null #set all variables that point to Excel objects to null $ws = $Null #makes sure Excel deflates $Excel=$Null #let the air out