【问题标题】:Copy valuem to EmptyRow将值复制到空行
【发布时间】:2021-04-08 13:00:16
【问题描述】:

我有这个代码:

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())
    
}

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

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

不知道如何包含在此代码中,因为我在编码方面很蹩脚。我正在考虑 isBlank,但不知道如何让它按我想要的方式工作。

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-api spreadsheet


    【解决方案1】:
    • 如果数据(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);
    

    【讨论】:

    • 太棒了,第二个选项完美运行。非常感谢您的所有帮助,非常感谢您!
    • 非常欢迎,@RafaNHS。很高兴听到我能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多