我有一个在Powershell中运行的SQL查询,它将结果导出到一个带有多个电子表格的Excel工作簿。我现在大部分问题都已经解决,但是我有一个相当大的问题。PowerShell执行SQL查询,将输出格式化为excel。从输出丢失一些数据
结果应返回填满3列的值。该查询在PowerShell之外工作并返回预期结果,但我失去了第三列的结果。对于经验丰富的人来说,这可能是显而易见的,但我很难过。
我一直在寻找一种方法来回显或从PowerShell输出我的查询结果到屏幕上,以帮助我确定丢失数据的位置,但没有骰子。
这里是脚本:
$DSN='mydsn'
$DirectoryToSave = 'c:\report\'
[email protected]"
My Working Query
"@
if (!(Test-Path -path "$DirectoryToSave")) #create it if not existing
{
New-Item "$DirectoryToSave" -type directory | out-null
}
$excel = New-Object -ComObject excel.application
$excel.visible = $True
$excel.DisplayAlerts = $False
$xl=$excel.Workbooks.Add()
$xl.Worksheets.Add()
$xl.Worksheets.Add()
$s1=$xl.sheets.Item(1)
$ws1 = $xl.sheets | where {$_.name -eq 'Sheet1'}
$ws1.name = $Project
$qt = $ws1.QueryTables.Add("ODBC;DSN=$DSN", $ws1.Range("A1"), $SQL1)
if ($qt.Refresh()){
$ws1.Activate()
$ws1.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("A:C").EntireColumn.AutoFit()
$excel.Columns.item("B").NumberFormat=("$#,##0.00")
}
在第三式柱的值应该是数字,并且通常返回由逗号分隔的一个4位值。每个单元格可以有多种返回的值。这就是为什么我使用“$ excel.Columns.item(”A:C“)。EntireColumn.AutoFit()”自动设置的原因。
任何人有任何想法我错了?
谢谢提前!
这是一个应该填充第3列的数据的例子。每行都会像这样填充:** 4084,4207,4296,4312,4324,4325,4356,4363,4364,4368,4369,4377, 4390,4403,4411,4419,4422,4425,4448,4453,4459,4476,4497,4516,4518,4534,4536,4547,4579,4583,4584,4587,4602,4607,4635,4641,4643, 4672,4675,4679,4687,4689,4697,4708,4736,4839,4975,4998,5005,5064,5080,5102,5151,5172,5180,5223,5237,5238 ** – 2015-02-24 16:25:47
您的意思是说,将根据您想要的结果从这个问题?:http://stackoverflow.com/questions/28118034/ms-sql-query-assistance – Kev 2015-02-24 19:56:09
我的意思是,当我运行我的查询以外的PowerShell时,我得到3列的数据。第一个是公司名称|美元价值|发票。有时在这种情况下涉及多个发票,他们输出为我的示例(没有包装所有结果在一行中)。当我运行我应该将结果输出到excel工作表的ps脚本时,我会得到我期望的所有内容,除了发票号码。即使标题在那里,但根本没有数据。 – 2015-02-24 20:12:28