将范围从另一个电子表格复制到另一个电子表格

时间:2019-11-20 01:54:58

标签: google-apps-script google-sheets

前段时间,我偶然发现了一个代码,该代码可以将同一电子表格中的范围从一个工作表复制到另一个工作表。

var source_sheet = ss.getSheetByName("Sheet1");
var target_sheet = target.getSheetByName("Sheet2");

var url = "#gid=" + newSheet.getSheetId()

var source_range = source_sheet.getActiveRange();
source_range = source_sheet.getRange(source_range.getRow(), 1, 1, 3);
source_sheet.getRange("I" + source_range.getRow()).setFormula('=IFERROR(Sheet2!C4," ")')
source_sheet.getRange("K" + source_range.getRow()).setFormula('=HYPERLINK("' + url + '","Generated Sheet")')
var target_range = target_sheet.getRange("B4");

source_range.copyTo(target_range);

脚本按预期工作,但是现在我想从一个电子表格复制到另一个电子表格。而且,当我将来自其他电子表格的表格设置为目标表格时,我得到源和目标的错误必须在同一电子表格中。

因此,有没有解决方法?我以为可能使用importrange,但是我如何指定URL和要使用插入函数脚本导入的源范围中的所选范围。如果您能想到其他解决方案,请告诉我。

1 个答案:

答案 0 :(得分:1)

source_range.copyTo(target_range);

您收到此错误消息是因为copyTo() method基于范围,并且假定源和目标位于可耻的电子表格中。

复制范围的更直接方法是使用setValues,即使有两个电子表格和两个不同的工作表。以下脚本对此进行了演示。


function so5894550501() {

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sourcesheetname = "sourcesheet";
  var source = ss.getSheetByName(sourcesheetname);

  var targetid = "<insert targetid>";
  var ts = SpreadsheetApp.openById(targetid);
  var targetsheetname = "targetsheet";
  var target = ts.getSheetByName(targetsheetname);

  var sourceRange = source.getRange(1,1,source.getLastRow(),source.getLastColumn());
  Logger.log("the source range = "+sourceRange.getA1Notation())
  var sourceValues = sourceRange.getValues();
  Logger.log(sourceValues);
  Logger.log(sourceValues.length)


  var targetRange = target.getRange(1,1,source.getLastRow(),source.getLastColumn());
  targetRange.setValues(sourceValues);// this works

}