【问题标题】:Adding multiple column fields to a PivotTable with Powershell使用 Powershell 将多个列字段添加到数据透视表
【发布时间】:2015-07-15 22:15:34
【问题描述】:

我在使用 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 宏,数据透视表最终以名称和 ID 作为列字段,将组作为行字段。使用 Powershell 脚本,只有 Name 是一个列字段。 ID 不是列字段。组仍然成为一个行字段。

有什么想法吗?我也尝试过将此方法与不同的 API 方法一起使用:

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

这给出了相同的结果。

【问题讨论】:

  • 在上面的 powershell 提取中,ID 用双引号括起来,而 NameGroup 用单引号括起来。
  • @GordonK 我的一位同事告诉我,有时单引号会破坏带有空格的字符串。在实际(专有)代码中,该字段名称中有一个空格,因此双引号可以解决任何可能出现的假设问题。

标签: vba excel powershell excel-interop


【解决方案1】:

我在添加数据字段后通过添加行和列字段解决了我的问题,如下:

$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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多