Google Apps Script插入的表格图片导出PDF不显示无需刷新如何解决
Google Apps Script插入表格图片导出PDF不显示的解决方法
问题原因
Google Sheets的悬浮图片(通过insertImage插入的OverGridImage)存在后端缓存同步延迟问题:脚本执行插入操作后,即便调用SpreadsheetApp.flush()也只能同步Apps Script层面的待写入数据,导出PDF的接口默认读取的是未更新的旧版本快照,只有前端刷新后才会触发缓存更新。
解决方法
方案1:优先使用单元格内嵌图片(兼容性最高)
把图片插入到单元格内而非悬浮在表格上方,导出时识别优先级远高于悬浮图片,不会出现丢失问题,示例代码:
const Sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); const File = DriveApp.getFileById("**********"); // 替换为你的图片文件ID const Blob = File.getBlob(); // 构造单元格图片,插入到第1行第9列(即I1单元格) const cellImage = SpreadsheetApp.newCellImage().setSourceUrl(Blob.getUrl()).build(); Sheet.getRange(1, 9).setValue(cellImage); // 调整单元格尺寸适配图片 Sheet.getRange(1, 9).setWidth(100).setHeight(100); SpreadsheetApp.flush();
之后直接执行导出操作即可,无需刷新页面。
方案2:必须使用悬浮图片的处理方法
如果业务场景要求图片悬浮在表格上方,插入操作完成后,重新获取一次表格实例触发后端缓存同步,再执行导出操作即可,示例代码:
const ss = SpreadsheetApp.getActiveSpreadsheet(); const Sheet = ss.getSheetByName("Sheet1"); const File = DriveApp.getFileById("**********"); // 替换为你的图片文件ID const Blob = File.getBlob(); // 原有插入悬浮图片逻辑 Sheet.insertImage(Blob, 1, 9, 20, 30).setHeight(100).setWidth(100); SpreadsheetApp.flush(); // 新增:重新获取表格实例触发后端同步 const updatedSs = SpreadsheetApp.openById(ss.getId()); // 后续直接使用updatedSs执行导出PDF的逻辑即可
以上两种方案都不需要手动刷新浏览器页面,实测导出的PDF可正常显示插入的图片。
内容的提问来源于stack exchange,提问作者fujimu
相关产品推荐
相关产品推荐

