Image 使用base64编码数据将图像插入带有应用程序脚本的Google工作表

Image 使用base64编码数据将图像插入带有应用程序脚本的Google工作表,image,google-apps-script,google-sheets,base64,Image,Google Apps Script,Google Sheets,Base64,给定png文件的一些base64编码数据,如下例所示,来自图像标记 <img src="data:image/png;base64,R0lGODlhDAAMAKIFAF5LAP/zxAAAANyuAP/gaP///wAAAAAAACH5BAEAAAUALAAAAAAMAAwAAAMlWLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7"> 文件: 我尝试使用下面的代码,但它抛出错误: 执行失败:从URL检索图像时出错或URL错误

给定png文件的一些base64编码数据,如下例所示,来自图像标记

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

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

执行失败:从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
}

这次修改怎么样

修改点: insertImage可以使用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
}
在脚本中,imageBlob是一个字节数组,其编号为[]。由此,我认为发生了错误。 请将名称添加到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
}
在此修改中,假设数据可以正确解码。 参考资料:
如果这不是您问题的直接解决方案,我很抱歉。

这次修改如何

修改点: insertImage可以使用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
}
在脚本中,imageBlob是一个字节数组,其编号为[]。由此,我认为发生了错误。 请将名称添加到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
}
在此修改中,假设数据可以正确解码。 参考资料:
如果这不是您问题的直接解决方案,我很抱歉。

谢谢。它起作用了。有趣的是,如果删除blob name示例,它将给出一个错误。因此,出于某种原因,insertImage方法似乎希望blob有一个名称。@Alan Wells感谢您的回复。对另外,我认为如果电子表格上的图像可以通过图像的文件名检索,这可能有助于管理电子表格上的图像。这一点很好。如果工作表中有多个图像,那么为每个图像命名将有助于识别它们。我还发现了另一个有趣的解决方案。我可以使用数据url:var data='base64Encoded data here';var url='data:image/png;base64'+数据;sh=ss.getSheetByNamepo.shName;var image=sh.insertImageurl,列,行;但是这个解决方案并没有给图像起一个名字。@Alan Wells感谢您的回复和添加信息。我认为这是一个好办法。我原以为URL只能使用图像文件的直接链接。但是从您的附加信息中,发现数据图像的url也可以使用。在这种情况下,base64数据在内部服务器上进行编码。因此,我认为成本可能低于客户端的编码过程。我正在做的是对base64数据图像数据进行硬编码,以避免外部请求图像url或读取Google Drive以获取图像文件。我正在尝试创建一个具有尽可能少的权限的加载项。如果有一种从html中获取base64数据的方法,那将是非常棒的。var html=提交;显然,按钮的html硬编码数据要比base64数据少得多。谢谢。它起作用了。有趣的是,如果删除blob name示例,它将给出一个错误。因此,出于某种原因,insertImage方法似乎希望blob有一个名称。@Alan Wells感谢您的回复。对另外,我认为如果电子表格上的图像可以通过图像的文件名检索,这可能有助于管理电子表格上的图像。这一点很好。如果工作表中有多个图像,那么为每个图像命名将有助于识别它们。我还发现了另一个有趣的解决方案。我可以使用数据url:var data='base64Encoded data here';var url='data:image/png;base64'+数据;sh=ss.getSheetByNamepo.shName;var image=sh.insertImageurl,列,行;但是这个解决方案并没有给图像起一个名字。@Alan Wells感谢您的回复和添加信息。我认为这是一个好办法。我原以为URL只能使用图像文件的直接链接。但是从您的附加信息中,发现数据图像的url也可以使用。在这种情况下,base64数据在内部服务器上进行编码。因此,我认为成本可能低于客户端的编码过程。我正在做的是对base64数据图像数据进行硬编码,以避免外部请求图像url或读取Google Drive以获取图像文件。我正在尝试创建一个具有尽可能少的权限的加载项。如果有一种从html中获取base64数据的方法,那将是非常棒的。var html=提交;显然,按钮的html硬编码数据要比base64数据少得多。