使用 Apps 脚本使用 Base64 编码数据将图像插入 Google 表格

Ala*_*lls 3 base64 image google-sheets google-apps-script

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

<img src="data:image/png;base64,R0lGODlhDAAMAKIFAF5LAP/zxAAAANyuAP/gaP///wAAAAAAACH5BAEAAAUALAAAAAAMAAwAAAMlWLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7">
Run Code Online (Sandbox Code Playgroud)

我需要根据该insertImage()方法的 Base64 编码数据创建图像 blob。

sheetClass.insertImage(imageBlob, column, row)
Run Code Online (Sandbox Code Playgroud)

文档: Sheets 类 - insertImage 方法

我尝试使用下面的代码,但它引发了错误:

执行失败:从 URL 检索图像时出错或 URL 错误

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

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
}
Run Code Online (Sandbox Code Playgroud)

Tan*_*ike 7

这个修改怎么样?

修改要点:

  • insertImage可以使用 blob 和 URL(图像文件的直接链接)。

    • 在您的脚本中,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
}
Run Code Online (Sandbox Code Playgroud)
  • 在此修改中,假设data可以正确解码。

参考:

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

  • 好点子。如果工作表中有多个图像,则为每个图像命名将有助于识别它们。我还发现了另一个有趣的解决方案。我可以使用数据url:`var data = 'base64Encoded data here';var url = 'data:image/png;base64,' + data;sh = ss.getSheetByName(po.shName);var image = sh.insertImage (url,column,row);`但是该解决方案没有给图像命名。 (3认同)