google-apps-script 多个条件覆盖 headers

google-apps-script multiple criteria writing over headers

我从 Serge 那里获取了一些很棒的脚本(原始 link here。我添加了第二个条件来排除某些行并且效果很好,除非没有 header 在被复制到的 sheet 中,它将不起作用(错误:"The coordinates or dimensions of the range are invalid."),如果我输入 header 或其他一些数据,它会覆盖它。有人可以帮忙吗?我还发现与我从未定义的消息 "TypeError: Cannot read property "length" 得到的条件不匹配。"

此外,我需要进行哪些更改才能将单元格 'dataSheetLog[i][12]' 更改为状态变量,即在我复制它之后 "COPIED"。我试过写一个 setValue 行,但它显然是该语法的错误指令。

代码是:

    {
    var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheetLog = Spreadsheet.getSheetByName("LOG");
    var sheetMaint = Spreadsheet.getSheetByName("MAINTENANCE");
    var Alast = sheetLog.getLastRow();
    var criteria = "08 - Maintenance"
    var status = "COPIED"
    var dataSheetLog = sheetLog.getRange(2,1,Alast,sheetLog.getLastColumn()).getValues();
    var outData = [];

    for (var i in dataSheetLog) {
    if (dataSheetLog[i][2]==criteria && dataSheetLog[i][12]!=status){
    outData.push(dataSheetLog[i]);
    }
    }
sheetMaint.getRange(sheetMaint.getLastRow(),1,outData.length,outData[0].length).setValues(outData);
}

在:

sheetMaint.getRange(sheetMaint.getLastRow(),1,outData.length,outData[0].length).setValues(outData);

getLastRow() 指的是最后占用的行,应该,getLastRow() + 1,避免覆盖你的 headers 和其他问题。

已编辑:

      {
    var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheetLog = Spreadsheet.getSheetByName("LOG");
    var sheetMaint = Spreadsheet.getSheetByName("MAINTENANCE");
    var Alast = sheetLog.getLastRow(); // Log
    var criteria = "08 - Maintenance"
    var status = "COPIED"
    var dataSheetLog = sheetLog.getRange(2,1,Alast,sheetLog.getLastColumn()).getValues(); //Log
    var dataSheetLogStatusRange = sheetLog.getRange(2,13,Alast,1); //Log
    var dataSheetLogStatus = dataSheetLogStatusRange.getValues();  //Log
    var outData = [];

    for (var i =0; i <  dataSheetLog.length; i++) {
    if (dataSheetLog[i][2]==criteria && dataSheetLog[i][12]!=status){
      outData.push(dataSheetLog[i]);
      dataSheetLogStatus[i][0] = "COPIED";
    }

    }
    if(outData.length > 0) {    
     sheetMaint.getRange(sheetMaint.getLastRow() + 1,1,outData.length,outData[0].length).setValues(outData);
     dataSheetLogStatusRange.setValues(dataSheetLogStatus);
    }
}
}

what change would I need to make to change the cell 'dataSheetLog[i][12]' to the status variable, i.e. "COPIED" after I have copied it across.

您试图更新从 sheet 而不是 sheet 本身提取的数组中的值。由于数组是从零开始的,而 spreadsheets 不是,要转换,必须将 +1 添加到数组行和列索引。我假设状态在您的 sheet.

的 M 列中