Google表格中的非典型合并(仅少数常见列)

时间:2018-08-15 10:29:25

标签: google-apps-script merge google-sheets

我知道,关于合并工作表有很多线程,但是我正在解决不常见的问题。我在这里找不到答案。我有Google表格文档,该文档正在用作IT库存。那份文件我有很多纸。例如,有单页服务器,照相机,交换机等...(sheet - servers, sheet - switches, sheet - cameras)。

每张纸上很少有公用栏,例如位置,IP地址,制造商,型号等,而每种设备都有很多特定的栏。服务器具有操作系统列,交换机具有VLAN设置列,依此类推...我需要使用所有这些表并创建一个新的概述表。所有工作表和相关记录中都将包含所有公共列,因此,例如,我可以过滤出一个位置中的所有设备并查看其IP地址,对一个位置中的设备进行计数,并根据其IP地址对所有设备进行排序等等。 (overview sheet

有人解决吗?

1 个答案:

答案 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();

}

编辑:根据评论-“为每个”替换