Excel Script数据透视表修改需求:隐藏分类汇总与总计、显示行列线条
Excel Script数据透视表修改需求:隐藏分类汇总与总计、显示行列线条
我来帮你调整这个Excel Script脚本,刚好能实现你要的「隐藏所有分类汇总、总计」以及「显示行列线条」的需求,咱们一步步来修改:
1. 先解决隐藏分类汇总的问题
不管是行层级还是列层级的分类汇总,都可以通过对应层级对象的setSubtotals方法来隐藏。你原来的代码里有注释提到要隐藏,但没实现,咱们补上这部分:
- 行层级的「Posting date」要隐藏子合计
- 列层级的「Project no.」「Name」「Task No.」也要逐个隐藏子合计
2. 隐藏总计(行/列的最终总计)
通过透视表的布局设置,直接关闭行总计和列总计的显示就行。
3. 给透视表添加行列线条(边框)
原来的循环代码没写完,咱们直接给整个透视表范围设置完整的边框格式,比逐行设置更高效。
以下是修改完成后的完整脚本,关键修改处我都加了注释:
function main(workbook: ExcelScript.Workbook) { let sheet = workbook.getActiveWorksheet(); // 查找数据范围(假设从A1开始) let dataRange = sheet.getRange("A1").getSurroundingRegion(); // 检查是否找到数据 if (!dataRange) { console.log("No data found."); return; } // 在当前工作表创建透视表,位置从H1开始 let pivotTable = sheet.addPivotTable("February", dataRange, sheet.getRange("H1")); // 添加行层级:Posting date let rowHierarchy = pivotTable.addRowHierarchy(pivotTable.getHierarchy("Posting date")); // 隐藏行层级的分类汇总 rowHierarchy.setSubtotals([ExcelScript.SubtotalLocation.none]); // 添加列层级并逐个隐藏分类汇总 let colHierarchy1 = pivotTable.addColumnHierarchy(pivotTable.getHierarchy("Project no.")); colHierarchy1.setSubtotals([ExcelScript.SubtotalLocation.none]); // 隐藏Project no.的子合计 let colHierarchy2 = pivotTable.addColumnHierarchy(pivotTable.getHierarchy("Name")); colHierarchy2.setSubtotals([ExcelScript.SubtotalLocation.none]); // 隐藏Name的子合计 let colHierarchy3 = pivotTable.addColumnHierarchy(pivotTable.getHierarchy("Task No.")); colHierarchy3.setSubtotals([ExcelScript.SubtotalLocation.none]); // 隐藏Task No.的子合计 // 添加数值字段:Time列求和 let qtyHierarchy = pivotTable.getHierarchy("Time"); let dataField = pivotTable.addDataHierarchy(qtyHierarchy); dataField.setSummarizeBy(ExcelScript.AggregationFunction.sum); // 隐藏行总计和列总计 pivotTable.getLayout().setShowRowGrandTotals(false); pivotTable.getLayout().setShowColumnGrandTotals(false); // 给透视表添加行列线条(设置所有边框) let pivotRange = pivotTable.getLayout().getRange(); let borderStyle = ExcelScript.BorderStyle.continuous; // 设置外边框 pivotRange.getFormat().getRangeBorder(ExcelScript.BorderIndex.edgeTop).setStyle(borderStyle); pivotRange.getFormat().getRangeBorder(ExcelScript.BorderIndex.edgeBottom).setStyle(borderStyle); pivotRange.getFormat().getRangeBorder(ExcelScript.BorderIndex.edgeLeft).setStyle(borderStyle); pivotRange.getFormat().getRangeBorder(ExcelScript.BorderIndex.edgeRight).setStyle(borderStyle); // 设置内边框(横向和纵向) pivotRange.getFormat().getRangeBorder(ExcelScript.BorderIndex.insideHorizontal).setStyle(borderStyle); pivotRange.getFormat().getRangeBorder(ExcelScript.BorderIndex.insideVertical).setStyle(borderStyle); console.log("透视表已创建完成,且已应用你要的格式设置!"); }
关键修改点说明:
- 每个行/列层级都调用了
setSubtotals([ExcelScript.SubtotalLocation.none]),彻底隐藏该层级的分类汇总 - 用
pivotTable.getLayout()的两个方法直接关闭了行/列总计 - 替换了原来未完成的循环,直接给整个透视表范围设置了连续的内、外边框,实现行列线条效果
备注:内容来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

