使用 base64 编码数据将图像插入 Google Sheet 和 Apps 脚本

Insert Image into a Google Sheet with Apps Script using base64 encoded data

给定 png 文件的一些 base64 编码数据,如下例中的图像标签。

<img src="data:image/png;base64,R0lGODlhDAAMAKIFAF5LAP/zxAAAANyuAP/gaP///wAAAAAAACH5BAEAAAUALAAAAAAMAAwAAAMlWLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7">

我需要为 insertImage() 方法从 base64 编码数据创建图像 blob。

sheetClass.insertImage(imageBlob, column, row)

文档: Sheets Class - insertImage method

我试过使用下面的代码,但它抛出了错误:

Execution failed: Error retrieving image from URL or bad URL

文档指出该方法需要一个 blob,而不是 URL,但它似乎需要 link 到图像文件。

function insertImageFromBase64Src() {
  var data = 'R0lGODlhDAAMAKIFAF5LAP/zxAAAANyuAP/gaP///wAAAAAAACH5BAEAAAUALAAAAAAMAAwAAAMlWLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7';

  var imageBlob = Utilities.newBlob(Utilities.base64Decode(data), 'image/png').getBytes();

  var ss = SpreadsheetApp.getActiveSpreadsheet();//This code is bound to a Sheet

  var po = {
    shName:'Update File',
    column:1,
    row:37
  }

  var sh = ss.getSheetByName(po.shName);

  var image = sh.insertImage(imageBlob, po.column, po.row);//Insert an image and return the image
}

这个修改怎么样?

修改点:

  • insertImage可以使用blob和URL是image文件的直接link

    • 在您的脚本中,imageBlob 是一个字节数组,即 "number[]"。据此,我认为发生了错误。
  • 请将名称添加到 blob。

    • 不给名字时,会出错

修改后的脚本:

当你的脚本修改后,变成如下。

function insertImageFromBase64Src2() {
  var data = 'R0lGODlhDAAMAKIFAF5LAP/zxAAAANyuAP/gaP///wAAAAAAACH5BAEAAAUALAAAAAAMAAwAAAMlWLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7';

  var imageBlob = Utilities.newBlob(Utilities.base64Decode(data), 'image/png', 'sample');  // Modified

  var ss = SpreadsheetApp.getActiveSpreadsheet();  //This code is bound to a Sheet

  var po = {
    shName:'Update File',
    column:1,
    row:37
  }

  var sh = ss.getSheetByName(po.shName);

  var image = sh.insertImage(imageBlob, po.column, po.row);//Insert an image and return the image
}
  • 在这个修改中,假设data可以正确解码。

参考文献:

如果这不能直接解决您的问题,我深表歉意。