2015-07-13 89 views
0

我在使用Powershell將多個列字段添加到Excel中的數據透視表時遇到問題。錄製的VBA宏工作正常,但一旦轉錄到Powershell,就會出現細微的錯誤。我有三列:ID,名稱和組。我希望ID和名稱是列分組和組作爲行分組。使用Powershell將多列字段添加到數據透視表

這可以在沒有任何問題或錯誤的Excel界面中完成。記錄的宏是:

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Name") 
    .Orientation = xlColumnField 
    .Position = 1 
End With 
With ActiveSheet.PivotTables("PivotTable1").PivotFields("ID") 
    .Orientation = xlColumnField 
    .Position = 2 
End With 
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Group") 
    .Orientation = xlRowField 
    .Position = 1 
End With 

宏記錄的運行和完美的作品。現在,我需要在Powershell中複製此代碼以執行自動化作業。這裏是我寫的Powershell:

$pt.PivotFields('Name').Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlColumnField 
$pt.PivotFields('Name').Position = 1 
$pt.PivotFields("ID").Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlColumnField 
$pt.PivotFields("ID").Position = 2 
$pt.PivotFields('Group').Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlRowField 
$pt.PivotFields('Group').Position = 1 

即使代碼是相同的,結果不是。使用VBA宏,數據透視表最終以Name和ID作爲列字段,Group作爲行字段。使用Powershell腳本,只有名稱成爲列字段。該ID不是列字段。集團仍然成爲一個行字段。

任何想法?我也試着用不同的API方法使用這種方法:

$pt.AddFields('Group', [array]('Name','ID')) 

這給出了相同的結果。

+0

在上面的powershell解壓縮中,_ID_用雙引號引起,而_Name_和_Group_用單引號引起來。 –

+0

@GordonK我的一位同事告訴我,有時候單引號可以打破其中有空格的字符串。在實際(專有)代碼中,該字段名稱中有一個空格,因此雙引號用於解決可能出現的所有問題。 –

回答

0

我解決我的問題,通過添加的行和列字段後,我添加的數據字段,如下所示:

$pt.AddDataField($pt.PivotFields('Group')) 
$pt.PivotFields('Name').Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlColumnField 
$pt.PivotFields('Name').Position = 1 
$pt.PivotFields('ID').Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlColumnField 
$pt.PivotFields('ID').Position = 2 
$pt.PivotFields('Group').Orientation = [Microsoft.Office.Interop.Excel.XlPivotFieldOrientation]::xlRowField 
$pt.PivotFields('Group').Position = 1 

這工作。我沒有在文檔中的任何地方看到這個,所以我希望這可以幫助像我一樣困惑的人。

相關問題