Google Sheets指定标签转PDF:复制仅保留值与格式问题求助
解决Google Apps Script复制工作表时保留格式并仅粘贴值的问题
要实现仅复制固定值(去除公式)同时保留单元格格式,再导出为PDF保存到指定文件夹,你可以按以下方式修改代码,核心是在复制工作表后将公式替换为计算值,同时保留格式:
function saveColoredTabsAsPDF() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheets = spreadsheet.getSheets(); var folderId = "_____________"; // 替换为你的目标文件夹ID for (var i = 0; i < sheets.length; i++) { var sheet = sheets[i]; var tabColor = sheet.getTabColor(); // 筛选标签为指定绿色的工作表 if (tabColor === "#93c47d") { try { // 创建临时表格 var temporarySpreadsheet = SpreadsheetApp.create("Temporary Spreadsheet"); var defaultSheet = temporarySpreadsheet.getActiveSheet(); // 删除临时表格默认的工作表,避免后续冲突 temporarySpreadsheet.deleteSheet(defaultSheet); // 将目标工作表复制到临时表格 var copiedSheet = sheet.copyTo(temporarySpreadsheet); // 重命名复制后的工作表(可根据需求调整) copiedSheet.setName("Billable Leads"); // 获取复制后工作表的全部数据范围 var dataRange = copiedSheet.getDataRange(); // 将公式替换为计算后的固定值,同时保留原有格式 dataRange.copyTo(dataRange, {contentsOnly: true}); // 导出为PDF并保存到指定文件夹 var pdfContent = temporarySpreadsheet.getAs('application/pdf'); var folder = DriveApp.getFolderById(folderId); folder.createFile(pdfContent.setName(sheet.getName() + ".pdf")); // 清理临时表格(取消注释即可启用自动删除) DriveApp.getFileById(temporarySpreadsheet.getId()).setTrashed(true); } catch (error) { Logger.log("处理工作表「" + sheet.getName() + "」出错:" + error.toString()); } } } }
关键修改说明:
- 删除临时表默认工作表:创建临时表时会自带一个默认工作表,先删除它可以避免后续PDF导出包含多余内容,也能解决
copyTo环节的潜在冲突 - 替换公式为固定值:通过
dataRange.copyTo(dataRange, {contentsOnly: true}),将复制后的工作表中所有单元格的公式替换为计算结果,同时完整保留字体、颜色、边框等格式 - 捕获复制后的工作表对象:直接用
sheet.copyTo()的返回值操作复制后的工作表,避免因工作表名称重复导致的操作错误
内容的提问来源于stack exchange,提问作者Sean Arnold
相关产品推荐
相关产品推荐

