如何通过Apps Script将Google Sheets中的CellImage插入Google Doc?
问题:无法从Google Sheets的CellImage提取URL并插入Google Docs
我在Google Sheets的A1单元格用公式=image("https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl=...)生成了一张二维码图片,尝试通过Apps Script创建新Google Doc并插入这张图,编写的代码如下:
function myFunction() { let doc = DocumentApp.create("QR Holder"); let sheet = SpreadsheetApp.getActiveSpreadsheet(); let range = sheet.getRange("A1"); let image = range.getValue(); let url = image.getUrl(); console.log(url); let blob = UrlFetchApp.fetch(url).getBlob(); let body = doc.getBody(); body.insertImage(0, blob); }
执行后日志报错:
11:01:18 AM Notice Execution started 11:01:21 AM Info 11:01:20 AM Error Exception: Attribute provided with no value: url myFunction @ Code.gs:8
原因分析
使用range.getValue()获取公式生成的CellImage时,返回的并非CellImage对象,无法调用getUrl()方法,导致url变量为空,进而触发UrlFetchApp.fetch()的参数错误。
解决方案
改用range.getCellImage()方法直接获取单元格内的CellImage对象,这是Google Sheets API专门用于读取单元格图片的方法,适用于公式生成或直接插入的图片。修正后的代码如下:
function myFunction() { let doc = DocumentApp.create("QR Holder"); let sheet = SpreadsheetApp.getActiveSpreadsheet(); let range = sheet.getRange("A1"); // 改用getCellImage获取CellImage对象 let cellImage = range.getCellImage(); if (cellImage) { let url = cellImage.getUrl(); console.log(url); let blob = UrlFetchApp.fetch(url).getBlob(); let body = doc.getBody(); body.insertImage(0, blob); } else { console.log("单元格中未找到图片"); } }
额外说明
- 无论是公式生成的图片还是直接插入单元格的图片,
getCellImage()方法都能正常读取; - 加入
if (cellImage)判断可避免因单元格无图片导致的报错; - 即使
=IMAGE公式使用了mode参数设置嵌入模式,此方法依然有效。
内容的提问来源于stack exchange,提问作者Hyrulian101
相关产品推荐
相关产品推荐

