使用Google工作表脚本时,如何在不创建新工作表副本的情况下将电子表格的工作表复制到另一个电子表格中?

时间:2020-03-05 09:00:56

标签: google-apps-script google-sheets

1。我有2个电子表格。我们称它们为A和B。

2.A有一张纸,我们称它为X,而B也有一张纸,我们称它为Y。

3.X具有我要复制到Y中的所有信息,例如值,格式,图片(我放入单元格中的信息)

4。因为X中包含图片,所以我不能使用importrange在Y中显示图片,因为它们的传播范围不同,所以我必须使用脚本将其复制到Y中。

5。我的目标是将X复制到Y,而不在B中创建其他工作表。

5。首先,我正在使用类似这样的代码

function CopySheet() {

    var ss = SpreadsheetApp.openById("A's ID");       //Get spread A
    var cs = SpreadsheetApp.getActiveSpreadsheet();   //Get spread B

    var sourceSheet = ss.getSheetByName("X's name");  //Get sheet X
    sourceSheet.copyTo(cs);                           //Copy X into B (create a new sheet Z)
 }

虽然新创建的工作表Z可以显示图片,但在Spread B中,我还有其他工作表使用的公式将引用与Y保持在一起。如果删除Y并将Z重命名为Y,我发现每个公式的引用都丢失了!

那么,scripits是否有某种方法只能将X复制到当前存在的Y中而无需创建新工作表?

1 个答案:

答案 0 :(得分:0)

解决方案

注意:此解决方案由@Cooper提供,他在对此问题的评论中建议了可能的答案。该答案已发布为社区Wiki。

要实现您的目标,这对我有用:

  1. 将工作表XA复制到B
  2. 将所有内容从Copy of X中的B复制到Y
  3. 删除Copy of X

下面的代码是如何工作的示例。您可以在代码的注释中找到对此的解释:

function myFunction() {
  // get spreadsheets A and B
  var a = SpreadsheetApp.openById('ID SHEET A');
  var b = SpreadsheetApp.openById('ID SHEET B');
  
  // copy sheet X into spreadhseet B
  a.getSheetByName('X').copyTo(b);
  
  // copy the values of the cells in the sheet just created in spreadsheet B
  var range = b.getSheetByName('Copy of X').getRange(b.getSheetByName('Copy of X').getLastRow(), b.getSheetByName('Copy of X').getLastColumn());
  
  // paste all the content of the sheet X into Y (into the desired range of Y)
  range.copyTo(b.getSheetByName('Y').getRange('A1'));
  
  // delete the sheet that was created when passing the information from one spreadsheet to another
  b.deleteSheet(b.getSheetByName('Copy of X'));
  
}

我希望这对您有所帮助。让我知道您是否需要其他任何东西,或者您是否不了解。 :)