首页 > 解决方案 > 将数据放在下一个空白行中,选择错误的列

问题描述

我确定这很简单,但我试图让它将数据粘贴到 U 列第一个空白单元格中。它目前从单元格 A28 开始粘贴在 A 列中。

function Update() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getRange("U:U").getValues();
  var maxIndex = values.reduce(function(maxIndex, row, index) {
  return row[0] === "" ? maxIndex : index;
  }, 0);
  sheet.setActiveRange(sheet.getRange(maxIndex + 2, 1));
  sheet.getRange('L28:S').copyTo(sheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};

标签: google-apps-scriptgoogle-sheets

解决方案


我相信你的目标如下。

  • 您希望将值放在“U”列的第一个空白处作为目标范围。
  • 源范围为L28:S

修改点:

  • 在您的脚本中,目标范围是sheet.getRange(maxIndex + 2, 1). 这样,值将复制到“A”列。我认为这是您的问题的原因。
  • 在您的情况下,我认为这getNextDataCell可能可以使用。

当你的脚本被修改后,它变成如下。

修改后的脚本:

function Update() {
  var sheet = SpreadsheetApp.getActiveSheet();

  // I modified below script.
  var range = sheet.getRange("U1:U" + sheet.getLastRow());
  var temp = range.getNextDataCell(SpreadsheetApp.Direction.DOWN);
  var destRange = temp.getRow() == sheet.getMaxRows() && sheet.getRange("U1").isBlank() ? sheet.getRange("U1") : temp.offset(1, 0);
  // destRange.activate();  // When you use this line, the start of copy is activated.
  sheet.getRange('L28:S').copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}

参考:


推荐阅读