如何在Google Sheets筛选指定数据范围时添加表头/分类
解决方法
你需要手动定义表头数组,并把它插入到筛选后的数据最前面,再一起写入新工作表。具体修改如下:
- 定义表头数组:根据你选中的列顺序,写出对应的表头文字(比如DATE、TOTAL、NAME等,要和你取的列对应上)。
- 将表头插入数据数组:用
unshift方法把表头加到筛选后的数据开头。 - 调整写入范围:因为现在数据包含了表头,写入时直接用完整的数组长度即可。
修改后的完整脚本:
function showInputBox(){ var ui = SpreadsheetApp.getUi(); var input = ui.prompt("请输入销售代表姓名", ui.ButtonSet.OK_CANCEL); if(input.getSelectedButton() == ui.Button.OK){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var ws = ss.getSheetByName("Monitoring (Database)"); var data = ws.getRange("A2:X" + ws.getLastRow()).getValues(); var userSelectedRep = input.getResponseText().toLowerCase(); var newData = data.filter(function(r){ return r[23].toLowerCase() == userSelectedRep}); // 定义表头,顺序要和下面selectedColumns的列对应 var headers = ["DATE", "TOTAL", "NAME", "列4", "列5", "列6", "列7", "列8", "列9"]; var selectedColumns = newData.map(function (r) { return [r[10], r[9], r[1], r[17], r[18], r[19], r[20], r[21], r[22]]; }); // 把表头插入到数据最前面 selectedColumns.unshift(headers); if (newData.length > 0){ var newWs = ss.insertSheet(userSelectedRep); // 写入包含表头的完整数据,从第3行第3列开始,行数是selectedColumns的总长度 newWs.getRange(3, 3, selectedColumns.length, selectedColumns[0].length).setValues(selectedColumns); } else { ui.alert("未找到匹配该姓名的数据。"); } } else { ui.alert("操作已取消。"); } }
注意事项
- 你需要把
headers数组里的文字改成你实际需要的表头名称,顺序要和selectedColumns里取的列一一对应,比如第一个元素对应r[10]的列,第二个对应r[9]的列,以此类推。 - 原来的
data从A2开始取是对的,因为你不需要原表的表头,而是自定义的表头,所以不用改成A1。
内容的提问来源于stack exchange,提问作者Unknown Users
相关产品推荐
相关产品推荐

