【问题标题】:Add data to the bottom of a range将数据添加到范围的底部
【发布时间】:2020-11-23 09:13:04
【问题描述】:

所以我目前正在尝试设置一个简单的按钮,它将数据从一个范围移动到另一个工作表中以供将来参考。如果它要包含的工作表不包含任何信息,我已经让它工作了,但我想将所有参考资料放在一张工作表中。

有没有办法添加到数据范围的底部?这就是我目前所拥有的。

function Addvoucher() {
            var ss = SpreadsheetApp.getActiveSpreadsheet();
            var target_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Meta');
            var source_sheet = ss.getSheetByName("Tools");
            var source_range = source_sheet.getRange("B9:D9");
            var target_range = target_sheet.getRange("S3:U3");
                        
            var last_row = target_sheet.getLastRow();
            
          var target_range = target_sheet.getRange("S3" + (last_row + 1) + ":U3" + (last_row + 1));
          
            target_sheet.insertRowAfter(last_row);
          
            source_range.copyTo(target_range);

}

【问题讨论】:

  • destSh.getRange(destSh.getLastRow()+1,1,numrows,numcols).....

标签: google-apps-script


【解决方案1】:

修改点:

  • 我认为在你的脚本中,如何修改target_sheet.getRange("S3" + (last_row + 1) + ":U3" + (last_row + 1))"S3" + (last_row + 1) + ":U3" + (last_row + 1) 如下?

  • 在当前脚本中,例如last_row + 12"S3" + (last_row + 1) + ":U3" + (last_row + 1) 变为S32:U32。在这种情况下,它必须是S2:U2。我认为这可能是您的问题的原因。

  • 试过了,问题是这个信息“块”左侧的其他列中有数据,因此它被放在第 100 行作为它的第一个可用行。

    • 根据您的回复,我了解到在您的电子表格中,除“U”到“S”列之外的列具有值,并且“U”到“S”列的最后一行与其他列不同.

当以上几点反映到你的脚本中时,我建议修改如下。

发件人:

var last_row = target_sheet.getLastRow();
var target_range = target_sheet.getRange("S3" + (last_row + 1) + ":U3" + (last_row + 1));

收件人:

var last_row = target_sheet.getLastRow();
var values = target_sheet.getRange("S1:U" + last_row).getValues();
for (var i = values.length - 1; i >= 0; i--) {
  if (values[i].every(e => e.toString() != "")) {
    last_row = i + 1;
    break;
  }
}
var target_range = target_sheet.getRange("S" + (last_row + 1) + ":U" + (last_row + 1));

【讨论】:

  • 试过了,问题是这个信息“块”左侧的其他列中有数据,因此它被放在第 100 行作为第一个可用行。
  • @liam gore 感谢您的回复。我带来的不便表示歉意。根据您的问题,我没有注意到在您的电子表格中,除“U”到“S”列之外的列具有值,并且“U”到“S”列的最后一行与其他列不同。这是因为我的英语水平不好。我对此深表歉意。所以我更新了我的答案。你能确认一下吗?如果这不是您期望的结果,我再次道歉。
  • 代码在 if (values[i].every(e => e.toString() != "")) { line 上返回语法错误
  • @liam gore 感谢您的回复。我带来的不便表示歉意。根据您的回复,我认为在您的情况下,您可能没有在脚本编辑器中启用 V8 运行时。如果是这样,请启用V8并再次测试。如果不想使用V8,请修改为values[i].every(function(e) {return e.toString() != ""})
  • 太完美了!它工作得很好!是时候整理我的元页面了:)
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多