将值复制到空行

Copy valuem to EmptyRow

我有这个代码:

function copyInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("WREQ");
  var pasteSheet = ss.getSheetByName("Orders/Deliveries");

  // get source range
  var source = copySheet.getRange("A2:X");;

  // get destination range
  var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,  3,  1,  1);
    // copy values to destination range
     source.copyTo(destination);
     copySheet.deleteRows(2, source.getNumRows())
    
}

它从WREQsheet复制A2:X中的信息并粘贴到Orders/Deliveriessheet的最后一行+1从c列开始.问题是,在 pasteSheet.getRange(pasteSheet.getLastRow()+1, 3, 1, 1); 上,它确实抓住了最后一个空行,并且由于我在 Orders/Deliveries A、B 列(用于控制)上有公式和复选框,它使脚本能够理解行不为空,然后去下一个,通常会往下走。

我希望它忽略 A、B 列,因为它们是控制列,并检查是否是从 C 列开始的最后一行,如果 C 为空则粘贴数据并继续执行脚本的其余部分。

不确定如何在此代码中加入,因为我的编码能力很差。我在考虑 isBlank,但不确定如何让它按照我想要的方式工作。

  • 如果数据(C 列)没有间隙,您可以尝试

var lastRow = pasteSheet.getRange("C:C").getValues().filter(String).length;

然后在下一行使用这个变量

var destination = pasteSheet.getRange(lastRow + 1,  3,  1,  1);
  • 如果数据范围内有间隙(空单元格),您可以创建一个辅助函数来计算列中的第一个空闲行(传递给函数的第二个参数)。

function findFirstFreeRow(sheet, colNum) {
    var v = sheet.getRange(1, colNum, sheet.getLastRow()).getValues(),
        l = v.length,
        r;
    while (l > 0) {
        if (v[l] && v[l][0].toString().length > 0) {
            r = (l + 2);
            break;
        } else {
            l--;
        }
    }
    return r;
}

然后调用此函数获取第一个空闲行

var destination = pasteSheet.getRange(findFirstFreeRow(pasteSheet, 3), 3,  1,  1);