使用 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
可以正确解码。
参考文献:
如果这不能直接解决您的问题,我深表歉意。
给定 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
可以正确解码。
参考文献:
如果这不能直接解决您的问题,我深表歉意。