Google脚本 - 将动态范围复制到新电子表格

时间:2016-12-22 06:22:04

标签: javascript google-apps-script

如果可能的话,我会对我的第一个Google脚本感谢一些帮助。

我试图通过将日常处理日志复制并粘贴到日终日志电子表格的底部来存档我们的日常处理日志。

问题是每天处理的行数会有所不同,因此我无法设置固定数量的行来复制到目标电子表格。

我只想将从第B7行向下复制到输入值的最后一行。



function pasteprocessinglog() {

  var sss = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sss.getSheetByName('Sheet_name');
  var range = ss.getRange('B7:J');
  var data = range.getValues();

  var tss = SpreadsheetApp.openById('URL');
  var ts = tss.getSheetByName('Processing Log');
  ts.getRange(ts.getLastRow() + 1, 2, ss.getMaxRows(), 9).setValues(data);
}




我目前收到错误:范围高度不正确,为6467但应为6473

我猜这是因为它试图复制空行而且电子表格还不够长。

任何帮助将不胜感激:)

谢谢!

1 个答案:

答案 0 :(得分:0)

在使用ss.getRange('B7:J')。getValues()检索的数据中,包含空单元格。因此,检索数据的长度大于实际数据的长度。 6467和6473分别表示数据数组的长度和getMaxRows()的值。

getMaxRows()检索包括空单元格在内的大多数底部单元格的数量。因此,在使用setValues()的情况下,可以使用setValues的数据数组长度作为getRange(https://developers.google.com/apps-script/reference/spreadsheet/sheet#getRange(Integer,Integer,Integer,Integer)的numRows来复制数据 )。

脚本如下。

function pasteprocessinglog() {
  var sss = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sss.getSheetByName('Sheet_name');
  var firstrow = 7; // 7th row
  var range = ss.getRange(firstrow, 2, ss.getLastRow() - firstrow + 1, 9);
  var data = range.getValues();

  var tss = SpreadsheetApp.openById('URL');
  var ts = tss.getSheetByName('Processing Log');
  ts.getRange(ts.getLastRow() + 1, 2, data.length, 9).setValues(data);
}

如果我的理解有误,我很抱歉。