我在使用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'))
这给出了相同的结果。
答案 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
这很有效。我在文档中的任何地方都没有看到这一点,所以我希望这可以帮助像我一样困惑的人。