我可以使用Range.setValues(values)将一系列值从一个电子表格复制到另一个电子表格,但不能使用Range.copyValuesToRange(sheet,column,columnEnd,row,rowEnd):
function test()
{
var sourceSheet = SpreadsheetApp.getActiveSheet();
var sourceCols = sourceSheet.getRange("A1:B10");
// Copying the first two columns this way works.
var sheet1 = SpreadsheetApp.create("New Spreadsheet 1").getActiveSheet();
sheet1.getRange("A1:B10").setValues(sourceCols.getValues());
// Copying the first two columns this way does not work.
var sheet2 = SpreadsheetApp.create("New Spreadsheet 2").getActiveSheet();
sourceCols.copyValuesToRange(sheet2, 1, 2, 1, 10);
}
具体而言,运行代码后,New Spreadsheet 1
包含源电子表格的范围 A1:B10,而New Spreadsheet 2
为空。两者都有一个名为"Sheet1"的工作表。源电子表格未修改。
我做错了什么?我想知道失败的方法是否仅适用于单个电子表格,但我在文档中没有看到任何相关信息。
我想使用 Range.copyValuesToRange() 的原因是,我也可以使用 Range.copyFormatToRange() 复制格式。
方法copyValuesToRange
和copyFormatToRange
以及Range.copyTo
,仅限于在同一电子表格中进行复制,尽管文档对此没有明确说明。允许您在具有格式的电子表格之间进行复制的解决方法是使用Sheet.copyTo
方法将整个工作表复制到目标电子表格。然后从那里复制所需的范围,并选择性地删除工作表。喜欢这个:
function cc() {
var ss1 = SpreadsheetApp.openByUrl('some url');
var ss2 = SpreadsheetApp.openByUrl('another url');
var sheet1 = ss1.getSheetByName('name');
var sheet2 = ss2.getSheetByName('another name');
// the above was the setup, main code begins here
var copySheet = sheet1.copyTo(ss2);
copySheet.getRange("A1:B2").copyTo(sh2.getRange("C1:D2"));
ss2.deleteSheet(copySheet);
}