【问题标题】:How to use google apps script to duplicate a new google sheet while preserving the conditional formatting?如何在保留条件格式的同时使用谷歌应用程序脚本复制新的谷歌工作表?
【发布时间】:2021-08-27 08:42:50
【问题描述】:

大家好,

我有一个谷歌表,里面有 2 个标签。数据均来自另一个谷歌表格,使用Importrange 公式。我想通过使用谷歌应用程序脚本复制这个谷歌表,同时保留条件格式,但同时删除Importrange 公式。换句话说,复制的工作表中不应有Importrange 公式,但仍具有所有格式和数据。有什么方法可以实现我的目标吗?互联网上有一些类似的问题,但没有完全符合我的要求。任何帮助将不胜感激!

【问题讨论】:

    标签: google-apps-script google-sheets google-drive-api


    【解决方案1】:

    解释:

    逻辑如下:

    • 复制原始电子表格文件中的工作表以保持条件格式并复制粘贴值以使导入范围消失。
    • 创建一个新的电子表格文件并将其放在与原始电子表格相同的文件夹中,并将原始电子表格文件的表格复制到新创建的表格中。
    • 删除原始电子表格文件中的重复工作表。
    • 更新(新电子表格文件的名称由原始电子表格(第一张)的单元格 E2 给出。

    解决办法:

    function duplicateSpreadsheet() {
      const ss = SpreadsheetApp.getActive();
      const ssid = ss.getId();
      const folderId = DriveApp.getFileById(ssid).getParents().next().getId();
      const title = ss.getSheetByName("Data1").getRange("E2").getDisplayValue(); //added
      const new_ss = SpreadsheetApp.create(title);
      const dest_folder = DriveApp.getFolderById(folderId);
      DriveApp.getFileById(new_ss.getId()).moveTo(dest_folder);
      const sheets = ss.getSheets();
      sheets.forEach(sh=>{
          let shDup = sh.copyTo(ss);
          shDup.getDataRange().setValues(shDup.getDataRange().getValues());
          shDup.copyTo(new_ss).setName(sh.getName());
          ss.deleteSheet(shDup);
      });
        new_ss.deleteSheet(new_ss.getSheetByName("Sheet1"));
    }
    

    【讨论】:

    • 您好 soMario,感谢您的回复。但我认为你误解了我的问题。我想复制整个电子表格(由两个选项卡组成,Data1Data2)并位于同一个谷歌驱动器文件夹中。您的代码所做的是在 google 表格中复制一个选项卡。您知道如何实现这一目标吗?
    • @weizer 我更新了我的答案。让我知道它是否适合您。
    • 我试过你的代码,但它只是复制了电子表格中的标签,而不是创建另一个新标签
    • 我看到你在使用SpreadsheetApp.create("Dup Spreadsheet"),但不知道为什么它不起作用
    • 好的,它完美运行!非常感谢
    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多