我知道,关于合并工作表有很多线程,但是我正在解决不常见的问题。我在这里找不到答案。我有Google表格文档,该文档正在用作IT库存。那份文件我有很多纸。例如,有单页服务器,照相机,交换机等...(sheet - servers, sheet - switches, sheet - cameras)。
每张纸上很少有公用栏,例如位置,IP地址,制造商,型号等,而每种设备都有很多特定的栏。服务器具有操作系统列,交换机具有VLAN设置列,依此类推...我需要使用所有这些表并创建一个新的概述表。所有工作表和相关记录中都将包含所有公共列,因此,例如,我可以过滤出一个位置中的所有设备并查看其IP地址,对一个位置中的设备进行计数,并根据其IP地址对所有设备进行排序等等。 (overview sheet)
有人解决吗?
答案 0 :(得分:2)
就这样。我写的:
function makeSummarySheet() {
// spreadsheet ID
var ID = '6Ca-aDgaHRsAALAh85vXjC79na4vgSOjs45Q6dOqxfQQ';
// sheet names
var sheetsArray = ["servers", "switches", "cameras"];
// common columns - CASE SENSITIVE!
var wantedColumns = [["name", "model", "locality", "IP address"]];
// final summary array
var overviewArray = [];
var ss = SpreadsheetApp.openById(ID);
var date = new Date();
var dateTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
if (sheetsArray.length >= 1) {
for (var x = 0; x < sheetsArray.length; x++) {
var sheet = ss.getSheetByName(sheetsArray[x]);
var sheetID = ss.getSheetByName(sheetsArray[x]).getSheetId();
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var columnNames = sheet.getRange(1, 1, 1, lastColumn).getValues();
var sheetData = sheet.getRange(2, 1, lastRow-1, lastColumn).getValues();
var cachedColumns = [wantedColumns[0],[]];
for(var i=0; i < lastColumn; i++) {
for(var y=0; y < wantedColumns[0].length ; y++) {
if (columnNames[0][i] == cachedColumns[0][y]) {
cachedColumns[1][y] = i;
}
}
}
for(var i =0; i < sheetData.length-1; i++) {
var tempArray = [];
tempArray[0] = '=hyperlink("#gid='+sheetID+'&range='+sheet.getRange(i+2,cachedColumns[1][0]+1).getA1Notation()+'";"'+sheetData[i][cachedColumns[1][0]]+'")';
for(var y=1; y < wantedColumns[0].length; y++) {
tempArray[y] = sheetData[i][cachedColumns[1][y]];
}
overviewArray.push(tempArray);
}
}
}
var overviewSheet = ss.insertSheet("SUM " + dateTime, ss.getSheets().length+1);
overviewSheet.getRange(1, 1, 1, wantedColumns[0].length).setValues(wantedColumns).setBorder(null, null, true, null, null, null).setFontWeight("bold");
overviewSheet.getRange(2, 1, overviewArray.length, wantedColumns[0].length).setValues(overviewArray);
overviewSheet.getRange(1, 1, overviewSheet.getLastRow(), overviewSheet.getLastColumn()).createFilter();
}
编辑:根据评论-“为每个”替换