【问题标题】:Google Script inserting an image without URL to Google Sheets谷歌脚本将没有 URL 的图像插入到谷歌表格
【发布时间】:2021-01-21 11:14:48
【问题描述】:

我的目标是从返回其内容(即 blob)的端点请求图像并将其插入到单元格中。请注意,该图像尚未保存在任何地方,因此它没有 URL。如果我是一名 JavaScript Web 开发人员,我可以使用 Image 对象并将其 src 设置为 URL.createObjectURL(...) 的结果。但我需要在基于 JS 的 Google Script 中解决这个问题。

在 Google Script 文档中有这个例子:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var blob = Utilities.newBlob(binaryData, 'image/png', 'MyImageName');
sheet.insertImage(blob, 1, 1);

我希望这段代码从端点获取图像并将其插入单元格 A1:

function onOpen() {
  var SPREADSHEET_URL = 'MY_SPREADSHEET_URL';
  var SHEET_NAME = 'SHEET_NAME';

  var ss = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  var sheet = ss.getSheetByName(SHEET_NAME);

  var response = UrlFetchApp.fetch(
      "ENDPOINT_URL").getContent();

  var image = Utilities.newBlob(response, "image/jpeg", "img.jpeg");
  sheet.insertImage(image, 1, 1);
}

但是,我收到一条错误消息,指出我的图像变量的类型(即 Blob)不受支持。

不支持 blob 格式。在打开时。

official docs 表示方法 newBlob 返回一个 Blob 对象。 我错过了什么?

【问题讨论】:

  • 我以为The blob format is unsupported.的错误信息,从ENDPOINT_URL的URL中检索到的数据可能不是图片数据。那么,在你的情况下,请问ENDPOINT_URL是不是图片的直接链接?
  • 我也不确定网页中是否确实存在没有 URL 的图像。我想被证明是错误的并学习新的东西,但我还没有看到没有网址的图像.. 但是你的问题 100% 取决于这个 "ENDPOINT_URL" 是什么所以我认为你不能在不重新获得答案的情况下得到答案有关它的更多信息。
  • 我的文字表述有些混乱,对此深表歉意。我的意思是 ENDPOINT_URL 是发出 GET 请求的 URL,服务器生成图像并将其作为 InputStreamResource 返回。图像 URL 是指存储图像的 URL(例如,在 AWS S3 上)。唉,只需使用 ENDPOINT_URL 调用 insertImage 方法就可以解决我的问题。

标签: google-apps-script google-sheets


【解决方案1】:

您可以尝试使用HTTPResponse.getAs(contentType) 喜欢:

var response = UrlFetchApp.fetch("ENDPOINT_URL").getAs('image/jpeg')

返回一个 Blob。然后使用Sheet.insertImage 插入工作表,例如:

sheet.insertImage(response, 1, 1);

并跳过 Blob 的创建。但正如 cmets 告诉你的那样,对象的有效性将取决于 'ENDPOINT_URL' 上的内容。

【讨论】:

  • 即使是简单的 sheet.insertImage("ENDPOINT_URL", 1, 1) 也能解决问题。您的回答也有效,正是它使我找到了解决方案,所以我接受了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多