Powershell Excel PivotFilters.Add

问题描述 投票:0回答:3

我编写了一个 Powershell 脚本来获取 CSV,从中创建 Excel 工作表,并创建一个包含几行和汇总值的数据透视表。 我还可以添加一个过滤字段,但我无法成功地告诉过滤字段我希望它过滤什么值。

PivotFilters.Add 和 PivotFilters.Add2 方法总是抛出“值不在预期范围内”错误。

这是代码的相关部分:

# Add PivotTable
$WS2 = $WBK1.Worksheets.Add()   
$WS2.Name = "PivotTable"

$xlPivotTableVersion15     = 5 # Excel 2013
$xlPivotTableVersion12     = 3 # Excel 2007
$xlDescending              = 2
$xlDatabase                = 1 # this just means local sheet data
$xlHidden                  = 0
$xlRowField                = 1
$xlColumnField             = 2
$xlFilterField             = 3
$xlDataField               = 4    
$xlSum                     = -4157
$xlAverage                 = -4106
$xlCount                   = -4112
$xlRight                   = -4152

$pivotRange = $WS1.UsedRange    

$PivotTable = $WBK1.PivotCaches().Create($xlDatabase,$pivotRange,$xlPivotTableVersion15)
$PivotTable.CreatePivotTable("R1C1","Tables1") | Out-Null 
[void]$WS2.Select()

$WBK1.ShowPivotTableFieldList = $true 

# configure pivottable fields

$PivotFields = $WS2.PivotTables("Tables1").PivotFields("VmName")
$PivotFields.Orientation = $xlRowField

$PivotFields = $WS2.PivotTables("Tables1").PivotFields("RAM")
$PivotFields.Orientation = $xlDataField
$PivotFields.Function = $xlAverage

$PivotFields = $WS2.PivotTables("Tables1").PivotFields("vCPU")
$PivotFields.Orientation = $xlDataField
$PivotFields.Function = $xlAverage

$PivotFields = $WS2.PivotTables("Tables1").PivotFields("Dept") # I also tried commenting these lines out
$PivotFields.Orientation = $xlFilterField                      # I also tried commenting these lines out

$xlValueEquals = 7
$xlCaptionEquals = 15
$WS2.PivotTables("Tables1").PivotFields("Dept").PivotFilters.Add2($xlValueEquals, "Finance")

我尝试同时使用 PivotFilters.Add 和 PivotFilters.Add2,无论哪种方式我总是得到“值不在预期范围内。”

我还尝试注释掉上面注释的行,因为我想知道创建的过滤器是否会使它感到困惑。

非常感谢任何建议!

excel powershell pivot-table
3个回答
1
投票

好吧,最后我发现基本上将一个值写入我使用...创建的过滤器的单元格中......

$PivotFields = $WS2.PivotTables("Tables1").PivotFields("Dept")
$PivotFields.Orientation = $xlFilterField 

...有效,所以我可以取消 PivotFilters.Add / PivotFilters.Add2 方法。 如果有人知道答案,我相信 t'interweb 上的人会很感激分享的解决方案。


0
投票

我也从未使用过

PivotFilters.Add
方法。然而,对我有用的是创建和操作切片器。

创建并配置后(例如日期切片器),您可以查询切片器的

SlicerCacheLevel.SlicerItems
数组中的有效值,然后通过更新
SlicerCache.VisibleSlicerItemsList
中的数组来应用过滤/切片数据。

令人困惑的是,当您尝试更新它时,有一个

SlicerCacheLevel.VisibleSlicerItemsList
会出错。由于
SlicerCache.VisibleSlicerItemsList
有效,我没有进一步研究。


0
投票

我使用 Add2 没有问题,但是早期的 powersell 帮助文件对于如何正确格式化 Add2() 并不准确。 使用以下格式。

PivotFilter.Add2(XlPivotFilterType 类型、变体数据字段、变体值 1、变体值 2、变体顺序、变体名称、变体描述、变体 MemberPropertyField,变体 WholeDayFilter)

对于 XlPivotFilterType 输入代表过滤器类型的正确数字。 对于变体数据字段,您需要使用完整路径,即: $wb.Sheets('Sheet1').PivotTables("PivotTable01").PivotFields("Count of date") 对于 Variant Value1,请使用您要过滤的值。

这是我的一个拉取示例,它在日期字段上过滤以过滤“开始于”2024-05-01。

$wb.Sheets('Sheet1').PivotTables('PivotTable01').PivotFields('日期').PivotFilters.Add2(17,$wb.Sheets('Sheet1').PivotTables("PivotTable01").PivotFields( “日期计数”),“2024-05-01”)

© www.soinside.com 2019 - 2024. All rights reserved.