我可以使用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()复制格式。
答案 0 :(得分:1)
方法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);
}