如何将单元格从一个 spreadsheet 复制到另一个 spreadsheet 的 sheet?

How do you copy cells from one spreadsheet to a sheet in a different spreadsheet?

我正在尝试创建一个脚本,允许用户将突出显示的单元格范围复制到另一个未打开的 google sheet 文档。如果我要将数据复制到的 sheet 在当前文档中,我可以让它工作,但我不知道如何将数据复制到不同的传播sheet。

我尝试了 openByIdopenbyUrl,但我不断收到以下错误:

"Target range and source range must be on the same spreadsheet."

function copyToDifferentDocument() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

// *** Have to figure out how to make the target a different document!!!! ***

  var target = SpreadsheetApp.openById("targetsheetIDgoeshere");
    
  /* 
  Next we need to pick the particular sheets within those spreadsheets.
  Let's say your row is on the sheet named "New Stuff", and you have a sheet in the target spreadsheet named "Archive".
  */

  var source_sheet = ss.getSheetByName("New Stuff");
  var target_sheet = target.getSheetByName("Archive");
    
  // The below makes the highlighted cells the range that will be copied.

  var source_range = source_sheet.getActiveRange();
  var last_row = target_sheet.getLastRow();
  target_sheet.insertRowAfter(last_row);
  var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));  
  
  // Take the highlighted rant and put it on the last row of the target sheet.
  
  source_range.copyTo(target_range);

}

我正在尝试将突出显示的范围复制到另一个 google sheet 文档中的 sheet。

  • 您想将活动 Spreadsheet 上 "New Stuff" 的 sheet 中的活动范围复制到 [=48= 的 sheet 中的最后一行] "targetsheetIDgoeshere"
  • 的 Spreadsheet

如果我的理解是正确的,这个修改怎么样?我认为您的情况有 2 种模式。

模式 1:

在此模式中,仅复制值。请修改如下。如果不需要复制格式,可以用这个。

从:
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));

// Take the highlighted rant and put it on the last row of the target sheet.

source_range.copyTo(target_range);
到:
var values = source_range.getValues();
target_sheet.getRange(last_row + 1, 1, values.length, values[0].length).setValues(values);

模式二:

在此模式中,值和格式都会被复制。请修改如下。不幸的是,copyTo() 只能将范围复制到同一个 Spreadsheet 上的范围。这种情况也可以在你问题的错误信息中看到。所以在这个修改中,首先,sheet被复制到目标Spreadsheet。然后,复制范围。

从:
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));

// Take the highlighted rant and put it on the last row of the target sheet.

source_range.copyTo(target_range);
到:
if (last_row > 0) target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange(last_row + 1, 1);
var copiedsheet = source_sheet.copyTo(target);
copiedsheet.getRange(source_range.getA1Notation()).copyTo(target_range);
target.deleteSheet(copiedsheet);

参考文献:

如果我误解了你的问题,我深表歉意。