如何在保留条件格式的同时使用 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"));
}
大家好,
我有一个 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"));
}