Sql server PowerShell执行SQL查询,将输出格式化为excel。从输出中丢失一些数据
我有一个在Powershell中运行的sql查询,它将结果导出到包含多个电子表格的excel工作簿。我现在已经解决了我的大部分问题,但是我有一个相当大的问题 结果应返回填充3列的值。查询在PowerShell之外工作并返回预期结果,但我将丢失第三列的结果。对经验丰富的人来说,这可能是显而易见的,但我的日子不好过 我一直在寻找一种方法,从PowerShell将查询结果回显或输出到屏幕,以帮助我确定数据丢失的位置,但目前还没有定论 以下是脚本:Sql server PowerShell执行SQL查询,将输出格式化为excel。从输出中丢失一些数据,sql-server,powershell,formatting,export-to-excel,Sql Server,Powershell,Formatting,Export To Excel,我有一个在Powershell中运行的sql查询,它将结果导出到包含多个电子表格的excel工作簿。我现在已经解决了我的大部分问题,但是我有一个相当大的问题 结果应返回填充3列的值。查询在PowerShell之外工作并返回预期结果,但我将丢失第三列的结果。对经验丰富的人来说,这可能是显而易见的,但我的日子不好过 我一直在寻找一种方法,从PowerShell将查询结果回显或输出到屏幕,以帮助我确定数据丢失的位置,但目前还没有定论 以下是脚本: $DSN='mydsn' $DirectoryToSa
$DSN='mydsn'
$DirectoryToSave = 'c:\report\'
$SQL1=@"
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.itemA:C.EntireColumn.autofit进行自动调整
有人知道我哪里出错了吗
提前谢谢 现在,围绕上一个问题中查询的内容部分,对VARCHAR进行转换,即:
SELECT
t.CUSTOMER,
SUM(t.REVENUE) as REVENUE,
CAST(
STUFF(
(
SELECT ',' + Cast(s.work_order as varchar)
FROM tblname s
WHERE s.CUSTOMER = t.CUSTOMER
FOR XML PATH('')
),1,1,''
) AS VARCHAR
) AS [WORK Order]
FROM tblname t
Group BY CUSTOMER
目前我无法解释为什么会这样,但我怀疑这是由于ODBC驱动程序中出现了某种字符串/字符类型或编码方式的问题。当我有更多的时间时,我会努力深入研究 这是一个应该填充第3列的数据示例。每行的填充方式如下:408442074296431243244325433564363436443684369437743904403441144194422442544484453445944764497451645184534453645454579458345844587460246060607467463541464434672467546794646894647084648394975499850050805105151517280522352375238您的意思是数据将根据您对这个问题的期望结果?我的意思是,当我在powershell之外运行查询时,我会在3列中获取数据。第一个是公司名称|美元价值|发票。有时,在这种情况下会涉及多个发票,它们作为我的示例输出,而不进行包装,因此所有结果都显示在一行中。当我运行ps脚本(该脚本应将结果输出到excel工作表)时,我得到了除发票号以外的所有预期结果。即使是标题也在那里,但该列中根本没有数据。非常感谢@Kev,这正是它所需要的@乔布洛-不客气。你知道你也可以+1一个被接受的答案:我马上接受了答案,但我想我需要一个更高的声誉来投票支持它。如果我错了,请告诉我,我很乐意尽快这样做。再次感谢你的帮助!