使用 Powershell 将多个列字段添加到数据透视表
Adding multiple column fields to a PivotTable with Powershell
我在使用 Powershell 将多个列字段添加到 Excel 中的 PivotTable 时遇到问题。录制的 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 宏,Pivot Table 以 Name 和 ID 作为列字段,Group 作为行字段结束。使用 Powershell 脚本,只有名称成为列字段。 ID 未成为列字段。组还是变成行字段。
有什么想法吗?我也尝试过将这种方法与不同的 API 方法结合使用:
$pt.AddFields('Group', [array]('Name','ID'))
这给出了相同的结果。
我在添加数据字段后通过添加行和列字段解决了我的问题,如下:
$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
这行得通。我在文档中的任何地方都没有看到这个,所以我希望这能帮助像我一样困惑的人。
我在使用 Powershell 将多个列字段添加到 Excel 中的 PivotTable 时遇到问题。录制的 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 宏,Pivot Table 以 Name 和 ID 作为列字段,Group 作为行字段结束。使用 Powershell 脚本,只有名称成为列字段。 ID 未成为列字段。组还是变成行字段。
有什么想法吗?我也尝试过将这种方法与不同的 API 方法结合使用:
$pt.AddFields('Group', [array]('Name','ID'))
这给出了相同的结果。
我在添加数据字段后通过添加行和列字段解决了我的问题,如下:
$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
这行得通。我在文档中的任何地方都没有看到这个,所以我希望这能帮助像我一样困惑的人。