設定済みの PivotFilter の条件を変更する場合、PivotFilter#setFilterCriteria を使います。
js
1function editPivot() {
2 const ss = SpreadsheetApp.getActiveSpreadsheet();
3 const sheet = ss.getSheetByName('Table');
4
5 const pivotTables = sheet.getPivotTables();
6 const pivotTable = pivotTables[0];
7
8 // 条件の内容となる配列
9 let array = [ '2023/1/23', '2023/1/25', '2023/1/26', '2023/1/27' ];
10
11 // 条件の作成
12 const criteria = SpreadsheetApp.newFilterCriteria()
13 .setVisibleValues(array)
14 .build();
15
16 // フィルタが設定されていない場合は新規設定
17 if (pivotTable.getFilters().length === 0) {
18 pivotTable.addFilter(2, criteria);
19 } else {
20 // フィルタが設定されている場合は、表示されているフィルタの内容を上書き
21 pivotTable.getFilters().slice(-1)[0].setFilterCriteria(criteria);
22 }
23}
ピボットテーブルの条件には、同じ軸の条件であっても、複数のフィルタを重ねて設定することが可能です。
この場合シートに表示されるのは、最新の(=一番最後に設定した)フィルタになります。
複数のフィルタが重ねて設定されてしまっている可能性があることを考慮して、slice(-1)[0] により、PivotFilter の配列の最後の要素を取得しています。
また、上記のコードでarray を [] にすると、要素が空の条件が設定されることになりますので、文字通りすべてのデータが非表示となります。
これが不都合ならば(すなわち 「array が [] のときは全部のデータを表示したい」等の要件ならば)下記のようなコードになります。
js
1function editPivot() {
2 const ss = SpreadsheetApp.getActiveSpreadsheet();
3 const sheet = ss.getSheetByName('Table');
4
5 const pivotTables = sheet.getPivotTables();
6 const pivotTable = pivotTables[0];
7
8 // 条件の内容となる配列(空の場合)
9 let array = []; // [ '2023/1/23', '2023/1/25', '2023/1/26', '2023/1/27' ];
10
11 if (array.length === 0) {
12 // array が空の場合は、フィルタをすべて削除する
13 pivotTable.getFilters().forEach(filter => filter.remove());
14 return;
15 }
16
17 // 条件の作成
18 const criteria = SpreadsheetApp.newFilterCriteria()
19 .setVisibleValues(array)
20 .build();
21
22 if (pivotTable.getFilters().length === 0) {
23 //条件が設定されていない場合は新規設定
24 pivotTable.addFilter(2, criteria);
25 } else {
26 // 条件が設定されている場合は、表示されている条件の内容を上書き
27 pivotTable.getFilters().slice(-1)[0].setFilterCriteria(criteria);
28 }
29}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/29 12:18