【发布时间】: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 用双引号括起来,而 Name 和 Group 用单引号括起来。
-
@GordonK 我的一位同事告诉我,有时单引号会破坏带有空格的字符串。在实际(专有)代码中,该字段名称中有一个空格,因此双引号可以解决任何可能出现的假设问题。
标签: vba excel powershell excel-interop