Excel: создать сводку из скрипта, который позволяет «фильтр значений» - PullRequest
0 голосов
/ 28 мая 2018

Я использую сценарий Powershell для добавления сводной таблицы в существующую книгу Excel.

Однако я не могу добавить фильтр значений (Я использую функцию подсчета) - по крайней мере, это невозможно с помощью пользовательского интерфейса Excel.

Если я создаю сводную таблицу с помощью пользовательского интерфейса Excel, все работает как нужно.Итак, в чем разница между программно созданным сводным и пользовательским интерфейсами?

Программный свод: отсутствует опция фильтра значения: Programmatic pivot: the _missing_ value filter option

Сводная информация о пользовательском интерфейсе: доступен фильтр значений: UI created pivot: value filter is available

Мой код:

$xlRowField = 1
$xlColumnField = 2
$xlDataField = 4
$xlCount = -4112

$Excel.Visible = $True
$outputWorkBook = $Excel.Workbooks.Open("FILENAME.xlsx", $True, $True)
pivotTable = $outputWorkBook.ActiveSheet.PivotTableWizard()

$pivotTable.PivotFields("id").Orientation = [int]$xlRowField
$pivotTable.PivotFields("filename").Orientation = [int]$xlColumnField

$pivotDataCount = $pivotTable.PivotFields("id")
$pivotDataCount.Orientation = [int]$xlDataField
$pivotDataCount.Function = [int]$xlCount

Сгенерированный код как макрос VBA, который работает:

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets.Add
    ActiveWorkbook.Worksheets("Sheet2").PivotTables("PivotTable1").PivotCache. _
        CreatePivotTable TableDestination:="Sheet4!R3C1", TableName:="PivotTable3" _
        , DefaultVersion:=6
    Sheets("Sheet4").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable3")
        .ColumnGrand = True
        .HasAutoFormat = True
        .DisplayErrorString = False
        .DisplayNullString = True
        .EnableDrilldown = True
        .ErrorString = ""
        .MergeLabels = False
        .NullString = ""
        .PageFieldOrder = 2
        .PageFieldWrapCount = 0
        .PreserveFormatting = True
        .RowGrand = True
        .SaveData = True
        .PrintTitles = False
        .RepeatItemsOnEachPrintedPage = True
        .TotalsAnnotation = False
        .CompactRowIndent = 1
        .InGridDropZones = False
        .DisplayFieldCaptions = True
        .DisplayMemberPropertyTooltips = False
        .DisplayContextTooltips = True
        .ShowDrillIndicators = True
        .PrintDrillIndicators = False
        .AllowMultipleFilters = False
        .SortUsingCustomLists = True
        .FieldListSortAscending = False
        .ShowValuesRow = False
        .CalculatedMembersInFilters = False
        .RowAxisLayout xlCompactRow
    End With
    With ActiveSheet.PivotTables("PivotTable3").PivotCache
        .RefreshOnFileOpen = False
        .MissingItemsLimit = xlMissingItemsDefault
    End With
    ActiveSheet.PivotTables("PivotTable3").RepeatAllLabels xlRepeatLabels
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("id")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("filename")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables( _
        "PivotTable3").PivotFields("id"), "Sum of id", xlSum
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Sum of id")
        .Caption = "Count of id"
        .Function = xlCount
    End With
    Range("A5").Select
    ActiveSheet.PivotTables("PivotTable3").PivotFields("id").PivotFilters.Add2 _
        Type:=xlValueIsGreaterThan, DataField:=ActiveSheet.PivotTables( _
        "PivotTable3").PivotFields("Count of id"), Value1:=1
End Sub

1 Ответ

0 голосов
/ 29 мая 2018

Я принял (временный) обходной путь.Я просто приостановил выполнение сценария и попросил пользователя вручную создать сводную таблицу.После этого скрипт настраивает сводную таблицу вкл.фильтр значений.

...