如何使用Google Apps Script复制谷歌表格保留条件格式并移除Importrange公式
解决方案
实现逻辑
先完整复制原表格保留所有格式(包含条件格式、单元格样式、工作表结构等),再将Importrange公式对应单元格替换为显示值,不需要调整格式相关配置,不会丢失原有样式。
操作步骤
- 打开你需要处理的原谷歌表格,点击顶部菜单栏「扩展程序」→「Apps Script」进入脚本编辑器
- 删除编辑器内默认的空白代码,粘贴下方提供的脚本
- 将脚本第一行的
原表格ID替换为你的表格ID,可从浏览器地址栏spreadsheets/d/和/edit之间的字符串获取 - 点击编辑器顶部的运行按钮,首次运行需要按提示完成权限授权,授权完成后等待脚本执行结束即可
- 执行完成后你的谷歌云端硬盘根目录会生成命名为「原表格名称_值复制版」的新文件,就是符合要求的目标表格
完整脚本(删除所有公式,仅保留值)
如果需要移除所有公式,只保留所有数据和格式,使用以下代码:
function copySheetWithoutFormula() { // 替换为你的原表格ID const ORIGIN_SPREADSHEET_ID = "这里替换为你的原表格ID"; const originSs = SpreadsheetApp.openById(ORIGIN_SPREADSHEET_ID); // 复制整个表格,完整保留所有格式配置 const newSs = originSs.copy(`${originSs.getName()}_值复制版`); // 遍历新表格所有工作表,将公式替换为显示值 newSs.getSheets().forEach(sheet => { const dataRange = sheet.getDataRange(); dataRange.copyTo(dataRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); }); SpreadsheetApp.getUi().alert(`处理完成,新表格名称:${newSs.getName()}`); }
可选脚本(仅删除IMPORTRANGE公式,保留其他公式)
如果你还有其他公式需要保留,只需要移除Importrange相关公式,使用以下代码替换上面脚本的遍历部分即可:
// 遍历新表格所有工作表,仅替换包含IMPORTRANGE的公式为值 newSs.getSheets().forEach(sheet => { const dataRange = sheet.getDataRange(); const formulas = dataRange.getFormulas(); const values = dataRange.getValues(); for (let row = 0; row < formulas.length; row++) { for (let col = 0; col < formulas[row].length; col++) { if (formulas[row][col].toUpperCase().includes("IMPORTRANGE")) { sheet.getRange(row + 1, col + 1).setValue(values[row][col]); } } } });
内容的提问来源于stack exchange,提问作者weizer
相关产品推荐
相关产品推荐

