使用Powershell将多个列字段添加到数据透视表

时间:2015-07-13 13:08:19

标签: excel vba excel-vba powershell excel-interop

我在使用Powershell将多个列字段添加到Excel中的数据透视表时遇到问题。录制的VBA宏工作正常,但一旦转录为Powershell,就会出现细微的错误。

我有三列:ID,名称和组。我希望ID和Name为列分组,Group为行分组。

这可以在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脚本,只有Name成为列字段。该ID不是列字段。组仍然成为一个行字段。

有什么想法吗?我也尝试过使用这种方法使用不同的API方法:

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

这给出了相同的结果。

1 个答案:

答案 0 :(得分: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

这很有效。我在文档中的任何地方都没有看到这一点,所以我希望这可以帮助像我一样困惑的人。