Powershell 对 Excel 工作簿进行多个 SQL 查询

2024-03-02

首先,如果这是一个重复的问题,我深表歉意。我搜索了又搜索,但没有找到任何可以解决我所遇到的问题的内容。

我的目标是使用 7 个 Powershell 脚本,将 SQL 查询中的 CSV 输出到 1 个 Excel 工作簿中,每个 CSV 位于不同的工作表中。

我找到了这个https://social.technet.microsoft.com/Forums/scriptcenter/en-US/ef70e191-1b2e-4ba8-8845-58c4b1159ab7/multiple-csvs-into-multiple-sheets-of-an-excel https://social.technet.microsoft.com/Forums/scriptcenter/en-US/ef70e191-1b2e-4ba8-8845-58c4b1159ab7/multiple-csvs-into-multiple-sheets-of-an-excel哪个有效但是 Excel 工作簿结果将第一列作为最后一列。

function Export-Excel{
[cmdletBinding()]
Param([Parameter(ValueFromPipeline=$true)]
[string]$junk)
begin{
    $header=$null
    $row=1
}
process{
    if(!$header){
        $i=0
        $header=$_ | Get-Member -MemberType NoteProperty | select name
        $header | %{$Global:ws.cells.item(1,++$i)=$_.Name}
    }
    $i=0
    ++$row
    foreach($field in $header){
        $Global:ws.cells.item($row,++$i)=$($_."$($field.Name)")
    }
}

}

$xl=New-Object -ComObject Excel.Application
$wb=$xl.WorkBooks.add(1)
$Global:ws=$wb.WorkSheets.item(1)
$Global:ws.Name='Sunday'
import-csv 'C:\Sunday.csv' | Export-Excel

最终完成了以下工作。如果有更有效的方法,请告诉我。 SQL结果发送到Excel以利用EntireColumn.AutoFit()并将每个 SQL 查询结果放在其自己的工作表上。

$docs = "C:\Scripts\Output.xlsx"
If (Test-Path $docs){Remove-Item $docs}
Function Run-Query {
 param([string[]]$queries,[string[]]$weekdays)
## - Create an Excel Application instance:
$xlsObj = New-Object -ComObject Excel.Application
$xlsObj.DisplayAlerts = $false
$xlsWb = $xlsobj.Workbooks.Add(1)
## - Create new Workbook and Sheet (Visible = 1 / 0 not visible)
$xlsObj.Visible = 0
$time = 7
for ($i = 0; $i -lt $queries.Count; $i++){
 $percentage = $i / $time
 $remaining = New-TimeSpan -Seconds ($time - $i)
 $message = "{0:p0} complete" -f $percentage, $remaining    
Write-Progress -Activity "Creating Daily Reboot Spreadsheet" -status $message -PercentComplete ($percentage * 100)
 $query = $queries[$i]
 $weekday = $weekdays[$i]
$xlsSh = $xlsWb.Worksheets.Add([System.Reflection.Missing]::Value, $xlsWb.Worksheets.Item($xlsWb.Worksheets.Count))
$xlsSh.Name = $weekday
### SQL query results sent to Excel
$SQLServer = 'ServerName'
$Database = 'DataBase'
## - 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 = $query
$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)
$SqlConnection.Close()
$DataSetTable= $DataSet.Tables["Table"]
## - 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
[void] $xlsRng.EntireColumn.AutoFit()
}#End For loop.
#Delete unwanted Sheet1.
$xlsWb.Sheets.Item('Sheet1').Delete()
#Set Monday to Active Sheet upon opening Workbook.
$xlsWb.Sheets.Item('Cert').Activate()
## ---------- Saving file and Terminating Excel Application ---------- ##
$xlsFile = "C:\Scripts\Output.xlsx"
[void] $xlsObj.ActiveWorkbook.SaveAs($xlsFile)
$xlsObj.Quit()
## - End of Script - ##
Start-Sleep -Milliseconds 700
 While ([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsRng)) {'cleanup xlsRng'}
 While ([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsSh)) {'cleanup xlsSh'}
 While ([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsWb)) {'cleanup xlsWb'}
 While ([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsObj)) {'cleanup xlsObj'}
[gc]::collect() | Out-Null
[gc]::WaitForPendingFinalizers() | Out-Null
}#End Function
 $queries = @()
 $queries += "Query1"
 $queries += "Query2"
 $queries += "Query3"
 $queries += "Query4"
 $queries += "Query5"
 $queries += "Query6"
 $queries += "Query7"
$weekdays = @("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
Run-Query -queries $queries -weekdays $weekdays
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell 对 Excel 工作簿进行多个 SQL 查询 的相关文章

随机推荐

  • 如何计算 Neo4j 中的排名

    我有两种类型的节点 游戏玩家 和一种关系 已玩 PLAYED关系就是拥有一个属性 点 样本数据 玩家 309274 获得10分玩家 309275 获得20分玩家 309276 获得30分玩家 309277 获得40分玩家 309278 获得
  • 使用 long double 或仅使用 double 来计算 pi?

    我正在使用冗长的公式计算 pi 我试图更熟悉浮点数等 我有一个使用双精度数的工作程序 我的代码的问题是 如果我使用双精度数 则 pi 只能精确到小数点后第七位 我无法得到更准确的信息 如果我使用 long double 则 pi 精确到小数
  • 使用 System Groovy 脚本从 Jenkins 工作区读取文件

    我有一个与此非常相似的问题 使用 Groovy 脚本从 Jenkins 中的工作区读取文件 https stackoverflow com questions 22917491 reading file from workspace in
  • NumPy 广播:计算两个数组之间的平方差之和

    我有以下代码 在 Python 中这需要很长时间 必须有一种方法可以将此计算转换为广播 def euclidean square a b squares np zeros a shape 0 b shape 0 for i in range
  • 从oracle中选择记录

    为了选择最后一条记录 当我的数据库是 MySQL 时 我使用了这个 result mysql query SELECT Id FROM test ORDER BY LENGTH Id Id ASC count mysql numrows r
  • 如果存在则推送到 JavaScript 数组,如果不存在则先创建它

    有没有办法让这条线始终工作而不抛出TypeError Cannot read property Whatever of undefined var MyArray MyArray StringVariableName StringVaria
  • 如何使用 HTML Agility Pack 清理格式不良的 HTML

    我正在尝试替换这个可怕的正则表达式集合 该集合当前用于清理格式不良的 HTML 块 并偶然发现了 C 的 HTML Agility Pack 它看起来非常强大 但是 我找不到如何使用该包的示例 在我看来 这将是其中包含的所需功能 我确信我是
  • Orchard CMS:Javascript 文件返回 404 未找到,即使它存在

    我的 Orchard 模块中的编辑器模板的 Razor 视图中有以下内容 Script Include assets js AtFoot 当页面呈现时 我可以在底部看到这一行 美丽的 唯一的问题是 当我访问该路径时 出现 404 错误 该脚
  • Angular Material Design 中的事件日历

    我想使用 Angular Material Design 默认日期选择器日历作为事件日历 喜欢 http prntscr com fpg1lw http prntscr com fpg1lw 如何在日历中列出我的活动 我只想强调 Angul
  • Django 多对多关系不保存

    Update 对于任何好奇的人 我弄清楚了它是什么 为什么以及如何解决它 在我看来 我有 fields html tags title text taken date image 我在我的模板中使用 form as p 显然 一旦从表单中发
  • Swift 中的视图/层何时设置边界和框架?

    我有这样的东西UIView子类 override var bounds CGRect didSet somelayer frame bounds 在相应的somelayer 我有这个 override var bounds CGRect d
  • 如何解决启动 Chrome 时出现“获取默认适配器失败”错误并尝试使用 Selenium 使用 ChromeDriver 访问网页的问题

    我已经更新了 Selenium 但即使加载网页 错误仍然发生 然而 在某些情况下 驱动程序启动但停滞不前 这是否会导致问题 如果是 我该如何解决 11556 9032 0502 152954 314 ERROR device event l
  • 如何在 git bash 中启用 vim 风格导航?

    我已经厌倦了使用箭头键导航 git bash 并且我在某处读到可以在 git bash 中启用 vim 样式导航 所以我只是想知道如何启用此功能 您应该能够简单地输入 set o vi 这将激活 vi 风格的导航 我刚刚在 Windows
  • 重新部署后 HBase 协处理器未更新

    我正在使用 HBase 1 1 2 并尝试重新部署自定义端点协处理器来修复 Java 代码中的错误 我对协处理器代码进行了一些更改 并通过以下步骤重新部署它 重建协处理器 jar 将其复制到 HDFS 上的某个位置 删除现有的协处理器 al
  • 如何列出句子中表示动物的所有英语术语?

    例如 在句子 两匹马刚刚躺下 一群失去母亲的小鸭子鱼贯进入谷仓 有气无力地吱吱叫 左右徘徊 寻找不被踩踏的地方 有两种动物 马和鸭 我正在寻找动物名称的词汇表 但找不到足够完整的内容 这WordNet http wordnet prince
  • 不是 Stata 版本 5-12 .dta 文件

    我正在尝试使用我的电脑中的现有数据 dta file 我正在尝试使用以下命令在 R 中打开它 library foreign mydata lt read dta file C Users me Desktop data raw dta 但
  • 如何制作一个一次接受一个值的排列函数?

    我正在寻找一个函数 它接受区间 0 1 N 中的 1 个数字 并返回同一区间中的排列值 0 1 2 3 4 5 和 f x 的示例如下 f 0 5 f 1 1 f 2 0 f 3 4 f 4 2 f 5 3 根据我的研究 理解 这是一个循环
  • 在命令行上过滤 Logcat 日志

    public static final TAG Legendry Eagle 问题 我想查看日志 Legendry Eagle 从命令行 I tried adb logcat s Legendry Eagle adb logcat s
  • 求近似规则的点网格子集的周长

    让我们考虑一组接近规则的二维网格 这些网格与相邻网格相邻 相邻网格具有一个或多个相同的顶点 这里是10个网格的样本 顶点坐标 经度 纬度 如下 A lt lon lat 1 2 1 85 30754 27 91250 2 85 32862
  • Powershell 对 Excel 工作簿进行多个 SQL 查询

    首先 如果这是一个重复的问题 我深表歉意 我搜索了又搜索 但没有找到任何可以解决我所遇到的问题的内容 我的目标是使用 7 个 Powershell 脚本 将 SQL 查询中的 CSV 输出到 1 个 Excel 工作簿中 每个 CSV 位于