arrayformula 导致 "coordinates of the target range are outside the dimensions of the sheet array formula" 错误
arrayformula causes "coordinates of the target range are outside the dimensions of the sheet array formula" error
我用下面的代码将Sheet1的数据复制到Sheet2。
当我在 Sheet2 中插入 arrayformula(A2:A&B2:B)
时,脚本停止工作并且出现错误:
coordinates of the target range are outside the dimensions of the
sheet array formula
当我删除数组公式时,脚本执行成功。
我应该对代码(或数组公式)进行哪些更改才能让他们合作?
function dailyLog() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName('Sheet1');
var logSheet = ss.getSheetByName('Sheet2');
var lastRow = logSheet.getLastRow();
var range = sourceSheet.getDataRange();
range.copyTo(logSheet.getRange(lastRow + 2, 1), {contentsOnly: true}); // paste under previous paste
}
问题:
输入范围和输出范围不匹配:
输入范围: range = sourceSheet.getDataRange()
输出范围: logSheet.getRange(lastRow + 2, 1)
输出范围是单个单元格,而输入范围是整个数据范围(因此是多个单元格)。
解决方案:
如果输入范围是动态的,最好使用 getValues/setValues
代替:
function dailyLog() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName('Sheet1');
var logSheet = ss.getSheetByName('Sheet2');
var lastRow = logSheet.getLastRow();
var values = sourceSheet.getDataRange().getValues();
logSheet.getRange(lastRow+1,1,values.length,values[0].length).setValues(values);
}
现在数据的大小 (values
) 是在 length
函数的帮助下动态设置的。
参考:
我用下面的代码将Sheet1的数据复制到Sheet2。
当我在 Sheet2 中插入 arrayformula(A2:A&B2:B)
时,脚本停止工作并且出现错误:
coordinates of the target range are outside the dimensions of the sheet array formula
当我删除数组公式时,脚本执行成功。
我应该对代码(或数组公式)进行哪些更改才能让他们合作?
function dailyLog() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName('Sheet1');
var logSheet = ss.getSheetByName('Sheet2');
var lastRow = logSheet.getLastRow();
var range = sourceSheet.getDataRange();
range.copyTo(logSheet.getRange(lastRow + 2, 1), {contentsOnly: true}); // paste under previous paste
}
问题:
输入范围和输出范围不匹配:
输入范围: range = sourceSheet.getDataRange()
输出范围: logSheet.getRange(lastRow + 2, 1)
输出范围是单个单元格,而输入范围是整个数据范围(因此是多个单元格)。
解决方案:
如果输入范围是动态的,最好使用 getValues/setValues
代替:
function dailyLog() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName('Sheet1');
var logSheet = ss.getSheetByName('Sheet2');
var lastRow = logSheet.getLastRow();
var values = sourceSheet.getDataRange().getValues();
logSheet.getRange(lastRow+1,1,values.length,values[0].length).setValues(values);
}
现在数据的大小 (values
) 是在 length
函数的帮助下动态设置的。