我有需要转换为PowerShell的Pivot代码,但我做得不好。谁能帮忙将此转换编码到PowerShell中吗?
这是Excel VB宏代码:
Sub XX()
'
' XX Macro
Sheets("PivotSheet").Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Data!R2C2:R1680C10", Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="PivotSheet!R1C1", TableName:= _
"PivotTable1", DefaultVersion:=xlPivotTableVersion14
Sheets("PivotSheet").Select
Cells(1, 1).Select
With ActiveSheet.PivotTables("PivotTable1").PivotFields("State")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Submit Date")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Actual Completion Date")
.Orientation = xlRowField
.Position = 3
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("State")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
"PivotTable1").PivotFields("Actual Completion Date"), _
"Count of Actual Completion Date", xlCount
Range("A8").Select
Selection.Group Start:=True, End:=True, Periods:=Array(False, False, False, _
False, True, False, True)
End Sub
这是我为PowerShell创建的内容:
[void]PivotSheet.Select()
$PivotRange = "Data!R2C2:J$lastrow"+'C10'
$PivotTable = $WorkBook.PivotCaches().Create($xlDatabase,$PivotRange,$xlPivotTableVersion14)
$PivotTable.CreatePivotTable("PivotSheet!R1C1","PivotTable1") | Out-Null
Start-Sleep -Milliseconds 500
[void]PivotSheet.Select()
$WorkSheet2.activate() | Out-Null
$Worksheet2.Cells.Item(1,1).Select()
$WorkBook.ShowPivotTableFieldList = $true
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("State")
$PivotFields.Orientation = $xlRowField
$PivotFields.Position = 1
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("Submit Date")
$PivotFields.Orientation = $xlRowField
$PivotFields.Position = 2
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("Actual Completion Date")
$PivotFields.Orientation = $xlRowField
$PivotFields.Position = 3
$PivotFields = $Worksheet2.PivotTables("PivotTable1").PivotFields("State")
$PivotFields.Orientation = $xlColumnField
$PivotFields.Position = 1
$PivotFields = $Worksheet2.PivotTables("PivotTable1").AddDataField($Worksheet2.PivotTables,
("PivotTable1").PivotFields("Actual Completion Date"), "Count of Actual Completion Date", $xlCount)
$PivotFields.Range("A8").Select
但这还行不通。在设置表格的第一部分之前,我似乎还可以。
PivotTables("...")
是的缩写PivotTables.Item("...")
。PowerShell不允许使用此缩写,因此您必须Item()
在集合上使用该方法。代替
$Worksheet2.PivotTables("PivotTable1").PivotFields("...")
和
$Worksheet2.PivotTables.Item("PivotTable1").PivotFields.Item("...")
至于使用命名参数转换方法调用,您需要以正确的顺序提供所有参数。使用[Type]::Missing
该应保留其默认值的参数。不过,可以省略默认值的尾随列表。在你的情况下
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句