Google apps script Google应用程序脚本-getLastRow,其中某些列为空

Google apps script Google应用程序脚本-getLastRow,其中某些列为空,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有下面的GoogleApps脚本,它从源工作表复制数据并粘贴到另一个工作表中。它当前查找目标工作表的最后一个空行和最后一个空列。现在,我在目标工作表中有一些列填充了公式来处理粘贴的数据。目标工作表列范围是A:K,并且在列I:K中有公式。在中,有人可以帮助我使用新代码查找列A:H为空的最后一行吗 函数onEdit(e){ var电子表格=e.source; var sheet=spreadsheet.getActiveSheet(); var sourcesheetname=“SOP寄存器”

我有下面的GoogleApps脚本,它从源工作表复制数据并粘贴到另一个工作表中。它当前查找目标工作表的最后一个空行和最后一个空列。现在,我在目标工作表中有一些列填充了公式来处理粘贴的数据。目标工作表列范围是A:K,并且在列I:K中有公式。在中,有人可以帮助我使用新代码查找列A:H为空的最后一行吗

函数onEdit(e){
var电子表格=e.source;
var sheet=spreadsheet.getActiveSheet();
var sourcesheetname=“SOP寄存器”
var范围=e范围;
var sheet=range.getSheet();
var row=range.getRow();
var column=range.getColumn();
var editedColumn=range.getColumn();
var editedRow=range.getRow();
var列=7;
var date=range.getValue();
if(Object.prototype.toString.call(date)=='[Object date]'&&editedColumn==column&&editedRow>2&&sheet.getName()==sourcesheetname){
var targetsheetname=“内部审计登记簿”;
var target=e.source.getSheetByName(targetsheetname);
var numCols=sheet.getLastColumn();
var values=sheet.getRange(行,1,1,numCols).getValues()[0];
值。拼接(9)//直到并包括列I
值。拼接(7,1)//删除列H
value.splice(2,3);//保留所有列,并省略C、D和E列
var lastRow=target.getLastRow();
var lastCol=target.getLastColumn();
values.unshift(“SOP”);//将“SOP”追加到A列
target.appendRow(值);//追加新行

sheet.hideColumns(6,2);}}//onEdit函数的结尾
我相信您的目标如下

  • 您有一张表,其值在“a”到“K”列中。列“I”到“K”有公式
  • 您希望检索“A:H”范围内最后一行的编号
对于这个问题,这个答案如何?在这个答案中,我准备了一个函数来检索您想要的最后一行

修改脚本: 请添加以下功能。此函数通过输入图纸对象返回
lastRow
的值

function getLastRow(sheet) {
  const values = sheet.getRange("A1:H" + sheet.getLastRow()).getDisplayValues();
  let lastRow = 0;
  for (let r = values.length - 1; r >= 0 ; r--) {
    if (!lastRow && !values[r].every(e => e == "")) {
      lastRow = r + 1;
      break
    }
  }
  return lastRow;
}
为了在脚本中使用上述函数,请修改如下

发件人: 致:
  • 这样,可以在“A:H”范围内检索到
    lastRow
参考:
增加1: 关于另一个修改,请测试以下修改。在当前脚本中,
getLastRow(target)
检索的
lastRow
不被使用,
values
appendRow
追加到工作表的最后一行。因此,为了使用
lastRow
,请修改如下。在这种情况下,请根据更新的问题,将
getRange(“A1:H”+sheet.getLastRow())
修改为
getRange(“A1:F”+sheet.getLastRow())
,以实现
getLastRow
的功能

发件人: 致: 增加2:
  • 您有一张表,其值在“a”到“K”列中。列“I”到“K”有公式
  • 您希望检索“A:H”范围内最后一行的编号
  • 而且,您希望将列“I”到“K”的公式复制到放置值的同一行。
  • 为此,请按如下方式修改脚本。在这种情况下,请使用上面的
    getLastRow()

    发件人: 致:
    • 在这种情况下,至少要求第3行在列“I”到“K”处有公式
    • 如果第3行的“I”到“K”列中肯定有公式,我认为您也可以使用
      If(lastRow>=3)target.getRange(3,9,1,3)、copyTo(target.getRange(lastRow+1,9,1,3)、SpreadsheetApp.copypestype.PASTE_公式)

    评论不用于扩展讨论;这段对话已经结束。
    var lastRow = target.getLastRow();
    
    var lastRow = getLastRow(target);
    
    var lastRow = getLastRow(target);
    var lastCol = target.getLastColumn();
    values.unshift("SOP"); //Append "SOP" to column A
    target.appendRow(values); // Append new row  
    
    var lastRow = getLastRow(target);
    var lastCol = target.getLastColumn();
    values.unshift("SOP");
    target.getRange(lastRow + 1, 1, 1, values.length).setValues([values]);  // Modified
    
    var lastRow = getLastRow(target);
    var lastCol = target.getLastColumn();
    values.unshift("SOP"); //Append "SOP" to column A
    target.appendRow(values); // Append new row  
    
    var lastRow = getLastRow(target);
    var lastCol = target.getLastColumn();
    values.unshift("SOP");
    target.getRange(lastRow + 1, 1, 1, values.length).setValues([values]);  // Modified
    if (lastRow >= 3) target.getRange(lastRow, 9, 1, 3).copyTo(target.getRange(lastRow + 1, 9, 1, 3), SpreadsheetApp.CopyPasteType.PASTE_FORMULA);  // Added