首页 > 解决方案 > 如何将工作表名称与数组元素进行比较并使用脚本在 Google 工作表上执行任务?

问题描述

目标是获取每个工作表名称并检查它是否不在数组中。如果不是,则将某些范围复制到“数据库”表中,然后比较下一张表,依此类推。

问题是它比较,它给了我-1结果,它正在执行任务,而它不应该是,我看不出缺陷在哪里。

这是代码:

function concatenarResumos() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var databaseSheet = ss.getSheetByName("Database");
  var processedSheetsRng = ss.getSheetByName("Suporte").getRange("F6:F").getValues().flat();
  var shts = ss.getSheets();

  for (var j = 0; j < shts.length; j++) {
    for (var n = 0; n < processedSheetsRng.length; n++) {
      if (processedSheetsRng[n].indexOf(shts[j].getSheetName() === -1)) {

        shts[j].activate;
        var sheetName = shts[j].getSheetName();
        Logger.log("Sheet Name: " + sheetName);
        Logger.log("Processed Sheet Name: " + processedSheetsRng[n])

        var data = shts[j].getRange("C4").getValue();
        var naoConforme = shts[j].getRange("B8:G12").getValues();
        shts[j].getRange("B8:G12").copyTo(databaseSheet.getRange(databaseSheet.getLastRow() + 1, 2, 6, naoConforme.length), { contentsOnly: true });

        var targetCol = databaseSheet.getRange('A:A').getValues();
        var maxIndex = targetCol.reduce(function (maxIndex, row, index) {
          return row[0] === "" ? maxIndex : index;
        }, 0);
        databaseSheet.getRange(maxIndex + 2, 1, naoConforme.length, 1).setValue(data);
    }
  }
}

这是记录器的输出: 在此处输入图像描述

标签: javascriptarraysgoogle-apps-scriptgoogle-sheets

解决方案


function concatenarResumos() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dsh = ss.getSheetByName("Database");
  const ssh = ss.getSheetByName("Suporte");
  const svs = ssh.getRange(6, 6, sh.getLastRow() - 5).getValues().flat();
  const shts = ss.getSheets();

  for (let j = 0; j < shts.length; j++) {
    for (let n = 0; n < svs.length; n++) {
      if (~svs[n].indexOf(shts[j].getName())) {
        let d1 = shts[j].getRange("C4").getValue();
        shts[j].getRange("B8:G12").copyTo(dsh.getRange(dsh.getLastRow() + 1, 2, 6, d2.length), { contentsOnly: true });
        let tcol = dsh.getRange(1, 1, dsh.getLastRow()).getValues();
        let maxIndex = tcol.reduce(function (maxIndex, row, index) {return row[0] === "" ? maxIndex : index;}, 0);
        dsh.getRange(maxIndex + 2, 1, d2.length, 1).setValue(d1);
      }
    }
  }

F6:F&之类的范围A:A不适合与谷歌应用程序脚本一起使用,因为它们在数组末尾创建了很多需要过滤掉的空值。


推荐阅读