将 valuem 复制到 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())
    
}

它从WREQ表复制A2:X中的信息并将其粘贴到从c列开始的Orders/Deliveries表的最后一行+1。问题在于,在 pasteSheet.getRange(pasteSheet.getLastRow()+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),1);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...