2015-02-24 20 views
1

我有一個在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()」自動設置的原因。

任何人有任何想法我錯了?

謝謝提前!

+0

這是一個應該填充第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

+0

您的意思是說,將根據您想要的結果從這個問題?:http://stackoverflow.com/questions/28118034/ms-sql-query-assistance – Kev 2015-02-24 19:56:09

+0

我的意思是,當我運行我的查詢以外的PowerShell時,我得到3列的數據。第一個是公司名稱|美元價值|發票。有時在這種情況下涉及多個發票,他們輸出爲我的示例(沒有包裝所有結果在一行中)。當我運行我應該將結果輸出到excel工作表的ps腳本時,我會得到我期望的所有內容,除了發票號碼。即使標題在那裏,但根本沒有數據。 – 2015-02-24 20:12:28

回答

0

現在,從以前的問題,即緊裹CASTVARCHAR周圍查詢的STUFF部分:

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驅動程序中進行編碼時髦。當我有更多時間時,我會盡力深入研究。

+0

真棒@Kev非常感謝,這正是它所需要的! – 2015-02-24 21:12:03

+0

@joeblow - 不客氣。你知道你也可以+1被接受的答案:) – Kev 2015-02-24 21:14:37

+0

我立刻接受了答案,但我認爲我需要更高的聲望來投票。讓我知道如果我有這個錯誤,我會很樂意儘快這樣做。再次感謝你的幫助! – 2015-02-25 14:40:52