如何在保留条件格式的同时使用 google 应用程序脚本复制新的 google sheet?

How to use google apps script to duplicate a new google sheet while preserving the conditional formatting?

大家好,

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

解释:

逻辑如下:

  • 复制原始传播sheet 文件中的 sheet 以保留条件格式并复制粘贴值以使导入范围消失。
  • 创建一个新的spreadsheet文件并将其放在与原始文件相同的文件夹中并将原始spreadsheet文件的sheet复制到新创建的文件中.
  • 删除原始传播sheet文件中重复的sheets。
  • 更新(新的传播sheet文件的名称由原始传播sheet(第一个sheet)的单元格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"));
}