我正试图编写一个脚本,将一系列单元格复制到单元格B2。要从中复制的范围每次都会更改,因此希望突出显示左上角的单元格,然后脚本从那里获取它。到目前为止,我拥有的是:
function CopyToB2() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var cellRange = sheet.getActiveCell();
var selectedColumn = cellRange.getColumn();
var selectedRow = cellRange.getRow();
var range = SpreadsheetApp.getActiveSheet().getRange(selectedColumn,selectedRow,2,43);
range.setValues(range);
spreadsheet.getRange('B2').activate();
(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};
但是得到错误
异常:参数(SpreadsheetApp.Range(与SpreadsheetApp.Range.setValues 的方法签名
解释:
-
代码的主要问题是在
setValues
函数中传递了一个range
对象,因此会出现此错误。 -
第二个问题是,您以错误的顺序传递了getRange函数的参数(row,column,numRows,numColumns(。应该是:
getRange(selectedRow,selectedColumn,43,2)
而不是getRange(selectedColumn,selectedRow,2,43)
- 第三个问题是,您需要定义数据将粘贴到的范围,在这种情况下,不能只是一个单元格
B2
。您需要做的是将B2
定义为粘贴范围的开始,然后设置活动范围的值
解决方案:
function CopyToB2() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var cellRange = sheet.getActiveCell();
var selectedColumn = cellRange.getColumn();
var selectedRow = cellRange.getRow();
var dataRange = sheet.getRange(selectedRow,selectedColumn,43,2).getValues();
sheet.getRange(2,2,dataRange.length,dataRange[0].length).setValues(dataRange);
};