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



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

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

最新更新