如何用Google Apps Script对数据透视表Grand Total列降序排序并修改表格颜色
Google Apps Script 数据透视表优化:排序与样式调整
针对现有脚本无法实现的两个需求,以下是修改方案及完整代码:
一、按Grand Total列降序排序
通过对最外层行分组(ProductID)设置排序规则,关联数据透视值的总计结果实现降序:
- 对创建的
rowGroup1调用setSortOrder指定降序 - 用
setValueSortReference绑定之前定义的valueGroup(即SUM(QtyAvailable)的总计值)
二、修改默认灰色样式
数据透视表的灰色是默认交替行样式,先关闭该样式,再自定义背景色:
- 调用
setAlternatingRowStyle(false)关闭默认交替行 - 获取数据透视表所在范围,设置自定义背景色(示例用白色,可自行调整色值)
修改后的完整脚本
function createPivotTable2() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var auctionSheet = ss.getSheetByName("Auctions"); var pivotSheet = ss.getSheetByName("Pivot"); var mappingSheet = ss.getSheetByName("Mapping"); var range = auctionSheet.getRange("A:P"); var startValue = mappingSheet.getRange("B2").getValue(); var endValue = mappingSheet.getRange("C2").getValue(); var range2 = auctionSheet.getRange("E:E"); var values = range2.getValues(); var uniqueValues = new Set(); for (var i = 0; i < values.length; i++) { var value = values[i][0]; if (value >= startValue && value <= endValue) { uniqueValues.add(value); } } var outputValues = [...uniqueValues]; outputValues.sort(); var pivotTable = pivotSheet.getRange("A1").createPivotTable(range); var rowGroup1 = pivotTable.addRowGroup(2); // ProductID var rowGroup2 = pivotTable.addRowGroup(4); // productname var rowGroup3 = pivotTable.addRowGroup(12); // Prod_Category var columnGroup = pivotTable.addColumnGroup(13); // ConditionName var valueGroup = pivotTable.addPivotValue(9, SpreadsheetApp.PivotTableSummarizeFunction.SUM); // QtyAvailable rowGroup2.showTotals(false); // Disable "Show totals" for productname field rowGroup3.showTotals(false); // Disable "Show totals" for Prod_Category field pivotTable.addFilter(5, SpreadsheetApp.newFilterCriteria().setVisibleValues(outputValues).build()); // 新增:按Grand Total(总计)列降序排序 rowGroup1.setSortOrder(SpreadsheetApp.PivotTableSortOrder.DESCENDING) .setValueSortReference(valueGroup); // 新增:修改数据透视表默认灰色样式 pivotTable.setAlternatingRowStyle(false); // 关闭默认交替行灰色 var pivotRange = pivotSheet.getDataRange(); pivotRange.setBackground("#ffffff"); // 设置整体背景为白色(可替换为你需要的色值) // 可选:设置表头背景色 var headerRange = pivotSheet.getRange(1, 1, 1, pivotRange.getLastColumn()); headerRange.setBackground("#f5f5f5"); }
内容的提问来源于stack exchange,提问作者yael
相关产品推荐
相关产品推荐

