为什么我无法使用copyValuesToRange()在电子表格之间复制范围?

时间:2017-01-10 18:44:25

标签: google-apps-script google-sheets

我可以使用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()复制格式。

1 个答案:

答案 0 :(得分:1)

方法copyValuesToRangecopyFormatToRange以及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);
}