【问题标题】:How to copy spreadsheet's sheet into another spreadsheet without creating a new sheet copy when using google sheet script?使用谷歌工作表脚本时如何将电子表格的工作表复制到另一个电子表格而不创建新的工作表副本?
【发布时间】:2020-06-17 20:35:14
【问题描述】:

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。我发现每个公式的引用都丢失了!

那么脚本是否有某种方法可以仅将 X 复制到当前存在的 Y 中而不创建新工作表?

【问题讨论】:

  • 我认为答案是您必须将 A 中的 X 复制到 B,然后使用 copyTo 将范围从 B 中的 X(复制)移动到 y,完成后您可以删除 X(复制)在 B 中。

标签: google-apps-script google-sheets


【解决方案1】:

解决方案

注意:@Cooper 为您提供了此解决方案,他在对此问题的评论中提出了可能的答案。此答案作为社区 wiki 发布。

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

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

以下代码是其工作原理的示例。您可以在代码的 cmets 中找到对它的解释:

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'));
  
}

我希望这对您有所帮助。让我知道您是否需要其他任何内容,或者您​​是否不理解某些内容。 :)

【讨论】:

  • 感谢兰德沃尔夫!你的意见很有帮助。但我发现 var range = b.getSheetByName('Copy of X').getRange(b.getSheetByName('Copy of X').getLastRow(), b.getSheetByName('Copy of X ').getLastColumn());只返回 1 个单元格。所以我改用 getDataRange ,它对我来说很完美,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 2016-10-06
  • 2020-06-28
  • 2020-03-09
  • 1970-01-01
相关资源
最近更新 更多