Google Sheet用Google Script导入Google Photos图生成PDF失败求助
问题根源
Google Photos生成的lh3.googleusercontent.com前缀链接默认带访问权限校验,Google Sheet后台渲染PDF的进程没有对应权限访问非公开的Google Photos资源,因此无法加载图片,而公开的外网图片没有权限校验就可以正常显示。
可行解决方案
方案1:调整Google Photos图片权限与链接格式
- 将所有需要使用的平面图在Google Photos中开启链接分享,设置为「所有知道链接的人可查看」
- 修改原图片链接后缀:将默认链接末尾的尺寸参数(如
=w200-h200)改为=w1600,或直接删除所有后缀参数仅保留基础链接,部分场景下即可被PDF渲染进程正常识别。
方案2:转存到Google Drive使用兼容链接(稳定性最高)
- 将所有平面图上传到Google Drive共享文件夹,设置文件夹权限为「组织内所有人可查看」或「所有知道链接的人可查看」
- 提取Drive文件ID:Drive文件分享链接格式为
https://drive.google.com/file/d/[文件ID]/view,复制其中d/和/view中间的字符串即为文件ID - 将
IMAGE公式中的链接替换为https://drive.google.com/uc?export=view&id=[你的文件ID],该格式可被Google Sheet PDF渲染功能正常识别。
方案3:使用脚本直接插入图片(无需修改分享权限)
如果不想调整现有图片的存储位置和权限,可以将原代码中使用IMAGE公式的逻辑替换为直接插入图片Blob,示例修改代码如下:
// Récupération de l'ensemble des plans dans tPlansZones var feuillePlans = classeur.getSheetByName("Plans"); var tPlansZones = feuillePlans.getRange("E2:F").getValues(); for (let i = 0; i <tPlansZones.length; i ++){ // Si le plan correspond, enregistrement de l'url de celui-ci if (tPlansZones[i][0]==zoneAdd){ urlPlan = tPlansZones[i][1]; break; } else { continue; } } // 替换原公式插入逻辑,直接拉取图片Blob插入 var imageBlob = UrlFetchApp.fetch(urlPlan, { headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() } }).getBlob(); // 插入到B21位置(列数从1开始计数,B=2,行数21) var insertedImage = nouveauSheet.insertImage(imageBlob, 2, 21); // 调整图片尺寸适配合并后的B21:H45区域,可根据实际需求调整宽高数值 insertedImage.setWidth(600).setHeight(300); // 合并单元格 var fusionPlan = nouveauSheet.getRange("B21:H45").setHorizontalAlignment("center"); fusionPlan.merge();
该方法直接调用脚本的OAuth权限拉取图片,无需调整图片公开权限,生成PDF时图片会直接嵌入文件,稳定性更高。
内容的提问来源于stack exchange,提问作者Damien
相关产品推荐
相关产品推荐

