在Google Apps脚本中创建电子表格备份时,如何复制格式和值,而不是公式?

熊甜菜

目标是创建具有多个工作表的电子表格的冻结备份。备份电子表格需要复制值和格式,而不是公式。

有些工作表具有=IMPORTRANGE,如果先复制电子表格,然后再复制相同范围内的值以再次摆脱公式,这将成为问题,因为新电子表格需要访问函数中间的导入范围(这导致A1中的#REF)。

显然已经多次问过这个问题,但是似乎没有一个答案可以解决这个问题。我已经看过这些问题(实际上还有更多):链接1链接2链接3链接4链接5链接6我尝试从这些问题的答案或它们的组合中实施代码片段,但无济于事。跟踪我测试过的每一段代码变得很困难。

我尝试使用copyTo()任一forEach功能复制整个工作表,使用选项{contentsOnly:true}和进行复制{formatOnly:true},但均未成功。无论是copyTo()希望的范围是在同一个电子表格/张或getDataRange()不匹配的备份范围...

这是我当前正在使用的脚本,该脚本成功创建了仅包含值的整个电子表格的副本。我不记得是从哪个问题得到的。

function copyEntireSpreadsheet(){
  var ss,ssName,sheet,sheetName,data,destination
  ss = SpreadsheetApp.openById("id").getSheets();
  ssName = SpreadsheetApp.openById("id").getName();
  destination = SpreadsheetApp.create(ssName + " - " + new Date().toLocaleString());

  for (var i = 0; i < ss.length; i++){
    sheet = ss[i];
    sheetName = sheet.getSheetName();
    data = sheet.getSheetValues(1, 1, sheet.getLastRow(), sheet.getLastColumn());
    destination.insertSheet(sheetName);
    destination.getSheets()[i+1].getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).setValues(data);
  }

 destination.deleteSheet(destination.getSheetByName('Sheet1'));
}

源电子表格具有许多合并单元格的格式,条件格式等,非常适合复制。我也可以将某些工作表硬编码到脚本中,如果这与其他方法有所不同的话。

简而言之:我正在寻找具有多张工作表的电子表格的冻结备份。值和格式需要复制,而不是公式。

在所有这些问题的答案之一中,我可能缺少某些内容,因此我将继续尝试。同时,任何帮助/指导将不胜感激。提前致谢!

解决: @Tanaike的下面第二个示例脚本是一种很好的解决方法,用于复制引用了其他电子表格的工作表,因此需要访问它们之后才能仅被值覆盖。非常感谢@Tanaike在此方面的广泛帮助-非常感谢。

Tanaike
  • 您想要将电子表格中所有表格的值和格式复制到新的电子表格中。
    • 在这种情况下,您只想复制没有公式的值。
    • The source spreadsheet has a lot of formatting with merged cells, conditional formatting, etc.
    • 源Spreadsheet包含放在一起的值IMPORTRANGE
  • 您想使用Google Apps脚本来实现。

用于上述目标的示例脚本的流程如下。

流:

  1. 将源电子表格中的所有工作表复制为临时工作表。
  2. 在复制的图纸上,单元格仅被值覆盖。这样,可以删除公式。
    • 如果复制了源电子表格,则使用检索的值IMPORTRANGE变为#REF因为需要在新复制的电子表格上进行授权。为了避免这种情况,将临时表复制到源电子表格中。
  3. 复制源电子表格。
  4. 删除源电子表格中的临时工作表。
  5. 删除目标电子表格中的原始工作表。

通过上述流程,未经的授权,只能复制值IMPORTRANGE

示例脚本:

function copyEntireSpreadsheet() {
  var id = "###"; // Please set the source Spreadsheet ID.

  var ss = SpreadsheetApp.openById(id);
  var srcSheets = ss.getSheets();
  var tempSheets = srcSheets.map(function(sheet, i) {
    var sheetName = sheet.getSheetName();
    var dstSheet = sheet.copyTo(ss).setName(sheetName + "_temp");
    var src = dstSheet.getDataRange();
    src.copyTo(src, {contentsOnly: true});
    return dstSheet;
  });
  var destination = ss.copy(ss.getName() + " - " + new Date().toLocaleString());
  tempSheets.forEach(function(sheet) {ss.deleteSheet(sheet)});
  var dstSheets = destination.getSheets();
  dstSheets.forEach(function(sheet) {
    var sheetName = sheet.getSheetName();
    if (sheetName.indexOf("_temp") == -1) {
      destination.deleteSheet(sheet);
    } else {
      sheet.setName(sheetName.slice(0, -5));
    }
  });
}

参考文献:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Google Apps脚本中的不同电子表格之间复制条件格式

来自分类Dev

在Google Apps脚本和Google电子表格中格式化日期

来自分类Dev

在Google时区(而不是电子表格时区)中使用Google Apps电子表格脚本的日期

来自分类Dev

Google Apps 脚本复制范围从一个电子表格到另一个具有格式/公式的电子表格

来自分类Dev

Google Apps脚本,使用格式将一个电子表格复制到另一电子表格

来自分类Dev

Google Apps脚本,使用格式将一个电子表格复制到另一电子表格

来自分类Dev

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

来自分类Dev

Google Apps脚本函数的返回值未显示在电子表格中

来自分类Dev

在Google Apps脚本中从电子表格传递JSON值

来自分类Dev

使用 Google Apps 脚本确认电子表格列中的值

来自分类Dev

如何使用Google Apps脚本替换电子表格中的文本?

来自分类Dev

从电子表格中修改另一个电子表格:Google Apps脚本

来自分类Dev

从电子表格中修改另一个电子表格:Google Apps脚本

来自分类Dev

使用Google Apps脚本将Google电子表格导出为JSON(或XML)格式

来自分类Dev

使用Google电子表格脚本复制并粘贴

来自分类Dev

如何使用php在Google驱动器中创建电子表格并安装加载项或将应用脚本附加到电子表格中

来自分类Dev

Google电子表格公式

来自分类Dev

Google Apps脚本可遍历电子表格ID列表,并将范围复制到主文件中

来自分类Dev

Google Apps脚本可遍历电子表格ID列表,并将范围复制到主文件中

来自分类Dev

自动创建电子表格后,如何将电子表格的 URL 引用复制到其他 Google 电子表格中的跟踪表

来自分类Dev

如何使用Google脚本将电子表格复制到GDrive上的specifc文件夹中,而无需复制关联的表单和脚本

来自分类Dev

使用Google Apps脚本设置电子表格单元格格式

来自分类Dev

Google电子表格中的复杂公式

来自分类Dev

使用Google Apps脚本在Google电子表格中插入单元格

来自分类Dev

Google Apps脚本-将数据从电子表格追加到文档模板中的表格

来自分类Dev

如何通过Google Apps脚本将用户数据存储在Google电子表格插件中

来自分类Dev

Google电子表格条件格式的多个值

来自分类Dev

Google电子表格脚本

来自分类Dev

根据Google Apps脚本中的条件,计算一个值在电子表格列中出现的次数

Related 相关文章

  1. 1

    如何在Google Apps脚本中的不同电子表格之间复制条件格式

  2. 2

    在Google Apps脚本和Google电子表格中格式化日期

  3. 3

    在Google时区(而不是电子表格时区)中使用Google Apps电子表格脚本的日期

  4. 4

    Google Apps 脚本复制范围从一个电子表格到另一个具有格式/公式的电子表格

  5. 5

    Google Apps脚本,使用格式将一个电子表格复制到另一电子表格

  6. 6

    Google Apps脚本,使用格式将一个电子表格复制到另一电子表格

  7. 7

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

  8. 8

    Google Apps脚本函数的返回值未显示在电子表格中

  9. 9

    在Google Apps脚本中从电子表格传递JSON值

  10. 10

    使用 Google Apps 脚本确认电子表格列中的值

  11. 11

    如何使用Google Apps脚本替换电子表格中的文本?

  12. 12

    从电子表格中修改另一个电子表格:Google Apps脚本

  13. 13

    从电子表格中修改另一个电子表格:Google Apps脚本

  14. 14

    使用Google Apps脚本将Google电子表格导出为JSON(或XML)格式

  15. 15

    使用Google电子表格脚本复制并粘贴

  16. 16

    如何使用php在Google驱动器中创建电子表格并安装加载项或将应用脚本附加到电子表格中

  17. 17

    Google电子表格公式

  18. 18

    Google Apps脚本可遍历电子表格ID列表,并将范围复制到主文件中

  19. 19

    Google Apps脚本可遍历电子表格ID列表,并将范围复制到主文件中

  20. 20

    自动创建电子表格后,如何将电子表格的 URL 引用复制到其他 Google 电子表格中的跟踪表

  21. 21

    如何使用Google脚本将电子表格复制到GDrive上的specifc文件夹中,而无需复制关联的表单和脚本

  22. 22

    使用Google Apps脚本设置电子表格单元格格式

  23. 23

    Google电子表格中的复杂公式

  24. 24

    使用Google Apps脚本在Google电子表格中插入单元格

  25. 25

    Google Apps脚本-将数据从电子表格追加到文档模板中的表格

  26. 26

    如何通过Google Apps脚本将用户数据存储在Google电子表格插件中

  27. 27

    Google电子表格条件格式的多个值

  28. 28

    Google电子表格脚本

  29. 29

    根据Google Apps脚本中的条件,计算一个值在电子表格列中出现的次数

热门标签

归档