2015-07-13 69 views
0

我在使用Powershell将多个列字段添加到Excel中的数据透视表时遇到问题。录制的VBA宏工作正常,但一旦转录到Powershell,就会出现细微的错误。我有三列:ID,名称和组。我希望ID和名称是列分组和组作为行分组。使用Powershell将多列字段添加到数据透视表

这可以在没有任何问题或错误的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脚本,只有名称成为列字段。该ID不是列字段。集团仍然成为一个行字段。

任何想法?我也试着用不同的API方法使用这种方法:

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

这给出了相同的结果。

+0

在上面的powershell解压缩中,_ID_用双引号引起,而_Name_和_Group_用单引号引起来。 –

+0

@GordonK我的一位同事告诉我,有时候单引号可以打破其中有空格的字符串。在实际(专有)代码中,该字段名称中有一个空格,因此双引号用于解决可能出现的所有问题。 –

回答

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 

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

相关问题