Excel 将pivot代码从VBA转换为PowerShell

Excel 将pivot代码从VBA转换为PowerShell,excel,powershell,pivot,pivot-table,Excel,Powershell,Pivot,Pivot Table,我需要将Pivot代码转换为PowerShell,但我没有正确地使用它。有人能帮我把这个转换编码成PowerShell吗 这是Excel VB宏代码: Sub-XX() ' 'XX宏 工作表(“数据透视表”)。选择 ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase,SourceData:=_ “数据!R2C2:R1680C10”,版本:=xlPivotTableVersion14)_ CreatePivotTableDestinat

我需要将Pivot代码转换为PowerShell,但我没有正确地使用它。有人能帮我把这个转换编码成PowerShell吗

这是Excel VB宏代码:

Sub-XX()
'
'XX宏
工作表(“数据透视表”)。选择
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase,SourceData:=_
“数据!R2C2:R1680C10”,版本:=xlPivotTableVersion14)_
CreatePivotTableDestination:=“数据透视表!R1C1”,表名:=_
“数据透视表1”,默认版本:=xlPivotTableVersion14
工作表(“数据透视表”)。选择
单元格(1,1)。选择
使用ActiveSheet.PivotTables(“数据透视表1”).PivotFields(“状态”)
.Orientation=xlRowField
.位置=1
以
使用ActiveSheet.PivotTables(“数据透视表1”).PivotFields(“提交日期”)
.Orientation=xlRowField
.位置=2
以
使用ActiveSheet.PivotTables(“数据透视表1”).PivotFields(“实际完成日期”)
.Orientation=xlRowField
.职位=3
以
使用ActiveSheet.PivotTables(“数据透视表1”).PivotFields(“状态”)
.Orientation=xlColumnField
.位置=1
以
ActiveSheet.PivotTables(“PivotTable1”).AddDataField ActiveSheet.PivotTables(_
“数据透视表1”)。数据透视字段(“实际完成日期”)_
“实际完工日期计数”,xlCount
范围(“A8”)。选择
Selection.Group Start:=True,End:=True,句点:=Array(False,False,False_
假,真,假,真)
端接头
以下是我为PowerShell创建的内容:

[void]数据透视表。选择()
$PivotRange=“Data!R2C2:J$lastrow”+'C10'
$PivotTable=$WorkBook.PivotCaches().Create($xlDatabase,$PivotRange,$xlPivotTableVersion14)
$PivotTable.CreatePivotTable(“数据透视表!R1C1”,“数据透视表1”)|输出空值
开始睡眠-500毫秒
[void]数据透视表。选择()
$WorkSheet2.activate()| Out Null
$Worksheet2.Cells.Item(1,1).Select()
$WorkBook.ShowPivotTableFieldList=$true
$PivotFields=$Worksheet2.数据透视表(“数据透视表1”).数据透视字段(“状态”)
$PivotFields.Orientation=$xlRowField
$PivotFields.Position=1
$PivotFields=$Worksheet2.数据透视表(“数据透视表1”).数据透视字段(“提交日期”)
$PivotFields.Orientation=$xlRowField
$PivotFields.Position=2
$PivotFields=$Worksheet2.数据透视表(“数据透视表1”).数据透视字段(“实际完成日期”)
$PivotFields.Orientation=$xlRowField
$PivotFields.Position=3
$PivotFields=$Worksheet2.数据透视表(“数据透视表1”).数据透视字段(“状态”)
$PivotFields.Orientation=$xlColumnField
$PivotFields.Position=1
$PivotFields=$Worksheet2.PivotTables(“PivotTable1”).AddDataField($Worksheet2.PivotTables),
(“数据透视表1”)。数据透视字段(“实际完成日期”),“实际完成日期计数”,$xlCount)
$PivotFields.Range(“A8”)。选择
但这还不起作用。在设置表的第一部分之前,我似乎还可以…

数据透视表(“…”)
数据透视表的缩写。Item(“…”
)。PowerShell不允许使用此缩写,因此必须对集合使用
Item()
方法。替换

$Worksheet2.PivotTables("PivotTable1").PivotFields("...")

至于转换带有命名参数的方法调用,您需要以正确的顺序提供所有参数。使用
[Type]::缺少应保留其默认值的参数。不过,可以省略默认值的后续列表。在你的情况下,这条线

Selection.Group Start:=True, End:=True, Periods:=Array(False, False, False, _
  False, True, False, True)
可能会变成这样:

$periods = @($false, $false, $false, $false, $true, $false, $true)
$selection.Group($true, $true, [Type]::Missing, $periods)

经过Ansgar提供的大量开发和回答后,OK。我有完整的密码。我已将信息更改为“通用化”代码…谢谢大家的帮助。此代码有效且完整

# Select the cells. 
$Worksheet2.Cells.Item(1,1).Select()
$WorkBook.ShowPivotTableFieldList = $true

#$PivotFields = $Sheet1.PivotTables("PivotTable1").PivotFields($columnFields)
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("Field1") # ColumnLables     = "State"
$PivotFields.Orientation = $xlColumnField
$PivotFields.Position = 1 
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("Field2") # ColumnLables = "Submit Date"
$PivotFields.Orientation = $xlRowField
$PivotFields.Position = 1 
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("Field3") # ColumnLables = Actual Completion Date"
$PivotFields.Orientation = $xlDataField
$PivotFields.Position = 1 
# Set the range of the group. 
$range22 = $excel.Range("a7")
# $range22.Group() # To test the basic group. 
# Here is where the grouping is done. 
$periods = @($false, $false, $false, $false, $true, $false, $true)
$range22.Group($true, $true, [Type]::Missing, $periods)

定义“不起作用”。请给出预期结果和实际结果的示例。使用“1”参数调用“数据透视表”时出现异常:第1行的“工作表类的数据透视表方法失败”:字符:1+$Worksheet2。数据透视表(“数据透视表1”)。数据透视字段(“状态”)+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,MethodInvocationException+FullyQualifiedErrorId:ComMethodTargetInvocatAlso不确定如何在宏末尾转换此代码…>--请在您的问题中包含错误消息。当我逐行输入$pivotfields=$pivotfields=$Worksheet2.数据透视表(“数据透视表1”)。数据透视字段(“状态”),我会收到上面列出的错误…当我添加“.Item”时,我收到此错误,我将重新加载并重试>>方法调用失败,因为[System.Management.Automation.PSMethod]不包含名为“Item”的方法。第3行字符:1+$PivotFields=$Worksheet2.PivotTables.Item(“PivotTable1”).PivotFields.Item(“Sta…”+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,RuntimeException+FullyQualifiedErrorId:MethodNotFound
# Select the cells. 
$Worksheet2.Cells.Item(1,1).Select()
$WorkBook.ShowPivotTableFieldList = $true

#$PivotFields = $Sheet1.PivotTables("PivotTable1").PivotFields($columnFields)
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("Field1") # ColumnLables     = "State"
$PivotFields.Orientation = $xlColumnField
$PivotFields.Position = 1 
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("Field2") # ColumnLables = "Submit Date"
$PivotFields.Orientation = $xlRowField
$PivotFields.Position = 1 
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("Field3") # ColumnLables = Actual Completion Date"
$PivotFields.Orientation = $xlDataField
$PivotFields.Position = 1 
# Set the range of the group. 
$range22 = $excel.Range("a7")
# $range22.Group() # To test the basic group. 
# Here is where the grouping is done. 
$periods = @($false, $false, $false, $false, $true, $false, $true)
$range22.Group($true, $true, [Type]::Missing, $periods)