Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server PowerShell执行SQL查询,将输出格式化为excel。从输出中丢失一些数据_Sql Server_Powershell_Formatting_Export To Excel - Fatal编程技术网

Sql server PowerShell执行SQL查询,将输出格式化为excel。从输出中丢失一些数据

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

我有一个在Powershell中运行的sql查询,它将结果导出到包含多个电子表格的excel工作簿。我现在已经解决了我的大部分问题,但是我有一个相当大的问题

结果应返回填充3列的值。查询在PowerShell之外工作并返回预期结果,但我将丢失第三列的结果。对经验丰富的人来说,这可能是显而易见的,但我的日子不好过

我一直在寻找一种方法,从PowerShell将查询结果回显或输出到屏幕,以帮助我确定数据丢失的位置,但目前还没有定论

以下是脚本:

$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一个被接受的答案:我马上接受了答案,但我想我需要一个更高的声誉来投票支持它。如果我错了,请告诉我,我很乐意尽快这样做。再次感谢你的帮助!