如何复制仅含数值无公式/链接的Google Sheets表格并自动处理权限?
Google Sheets 副本生成及权限自动处理解决方案
方案1:生成仅保留纯文本数值的无关联副本
该方案生成的副本完全不含公式、跨表引用、外部关联链接,生成后无需任何权限确认即可直接查看所有数据,适配绝大多数存档、分发场景。
手动操作流程
- 打开需要复制的原Google Sheets表格,若存在多个工作表,需逐张切换处理
- 点击表格左上角行列交叉的空白区域,或按下快捷键
Ctrl+A(Windows)/Cmd+A(Mac)全选当前工作表所有单元格 - 按下
Ctrl+C/Cmd+C复制全部内容 - 新建空白Google Sheets表格,点击A1单元格后右键选择「仅粘贴值」,或使用快捷键
Ctrl+Shift+V/Cmd+Shift+V - 若需要保留原表格的单元格格式、条件格式、列宽等设置,可先执行「粘贴格式」操作后再执行粘贴值操作,避免公式被一同粘贴
自动化脚本操作(适配每周固定生成需求)
如果需要每周重复执行该操作,可通过Google Apps Script实现全自动化,无需手动逐张处理工作表:
- 打开原表格,点击顶部「扩展程序 --> Apps Script」打开脚本编辑器
- 粘贴以下代码:
function createPlainTextCopy() { // 读取原表格配置 const originalSs = SpreadsheetApp.getActiveSpreadsheet(); const allSheets = originalSs.getSheets(); // 按日期命名生成新表格 const newSs = SpreadsheetApp.create(`纯文本副本_${originalSs.getName()}_${Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMdd")}`); // 逐工作表复制内容 allSheets.forEach((sheet, index) => { const newSheet = index === 0 ? newSs.getSheets()[0] : newSs.insertSheet(); newSheet.setName(sheet.getName()); const dataRange = sheet.getDataRange(); // 粘贴值 dataRange.copyTo(newSheet.getRange(1,1), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); // 可选:粘贴格式 dataRange.copyTo(newSheet.getRange(1,1), SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false); // 可选:同步列宽 for(let i=1; i<=sheet.getLastColumn(); i++) { newSheet.setColumnWidth(i, sheet.getColumnWidth(i)); } }); // 可选:自动同步原表格的共享权限 originalSs.getEditors().forEach(editor => newSs.addEditor(editor.getEmail())); originalSs.getViewers().forEach(viewer => newSs.addViewer(viewer.getEmail())); // 弹窗返回副本地址 SpreadsheetApp.getUi().alert(`副本生成完成,访问地址:${newSs.getUrl()}`); }
- 保存脚本后首次运行按提示完成授权,后续每周需要生成副本时直接运行该函数即可。
方案2:自动触发跨表引用的允许访问权限
如果需要保留原表格的公式、跨表引用逻辑,不想仅留存纯文本,可以通过以下方法自动完成所有关联表格的权限确认,无需逐一点击「允许访问」:
注意:该方案仅适用于你本身对所有被引用的关联表格拥有合法访问权限的场景
- 生成原表格的副本并打开后,点击顶部「扩展程序 --> Apps Script」打开脚本编辑器
- 粘贴以下代码:
function autoAuthorizeImports() { const ss = SpreadsheetApp.getActiveSpreadsheet(); ss.getSheets().forEach(sheet => { const formulas = sheet.getDataRange().getFormulas(); formulas.forEach((row, rowIdx) => { row.forEach((cellFormula, colIdx) => { // 识别跨表/导入类公式,主动读取结果触发权限校验 if (cellFormula.includes('IMPORTRANGE') || cellFormula.includes('!')) { try { sheet.getRange(rowIdx + 1, colIdx + 1).getValue(); } catch (err) { // 无权限的引用可在此处添加自定义提示逻辑 } } }) }) }); SpreadsheetApp.getUi().alert("所有关联表格权限已验证完成"); }
- 保存脚本后授权运行即可一次性完成所有关联表格的权限确认,无需手动逐个点击允许按钮。
内容的提问来源于stack exchange,提问作者Jade Olayy
相关产品推荐
相关产品推荐

