繁体   English   中英

Google 工作表 insertImage function 停止为 Google Apps 脚本工作:验证图像错误

[英]Google sheet insertImage function stopped working for Google Apps Script: verify image error

几个月来,我一直在使用insertImage function每天将保存在我的云端硬盘中的图像插入到 Google 表格中。 今天它已停止工作并显示以下错误消息:

Exception: The image could not be inserted. Please verify it is valid and try again.

一直有效的过程是获取文件 ID、检索链接、从链接中获取图像并插入图像。 下面的代码说明了这一点:

  var blob = DriveApp.getFileById(fileID).getBlob()
  var width = 340; 
  var link = Drive.Files.get(fileID).thumbnailLink.replace(/\=s.+/, "=s" + width);
  var blob2 = UrlFetchApp.fetch(link).getBlob()
  var the_image = TemplateSheet.insertImage(blob2, 3, 13, 110, 0);

当我访问“链接”时,我会按预期定向到图像。 我还可以将“blob2”保存为图像并以其他方式使用它而不会出现任何错误。 谁能协助解决我收到的错误?

尝试这个:

function myFunction() {
  var blob = DriveApp.getFileById("fileid");
  var width = 340; 
  //Insert and resize image 
  SpreadsheetApp.getActiveSheet().insertImage(blob, 3, 13, 110, 0).setWidth(width);
}

参考:

insertImage(url, 列, 行, offsetX, offsetY)

OverGridImage:setWidth()

尽管在您的情况下,根据您对所选答案的评论,它是(可能?)一张格式错误的工作表 - 但它不在我的范围内,因此这个答案适用于在这里跌跌撞撞的其他人。

我发现 insertImage 调用根本不可靠(由于某些未知和未确定的原因)并且不可避免地会时不时地失败。 它很少在第一次使用时失败(我从未见过),但随后的使用,尤其是在循环中,必然会收到此错误。

我在 try catch 中包围了 insertImage 调用,然后用一段时间包围了它。 尽管会导致 hacky 和潜在的无限循环(尽管 google app 脚本有一个 6 分钟的硬终止计时器 - 所以没什么大不了的)它完成了工作并且我厌倦了与它作斗争。 随意放入一个 for 循环,而不是只尝试一定次数,或者使用调试器命令来查看是否可以进一步调试。

var insertSuccess = false;
var insertImageErrorMessage = "";

while (! insertSuccess )
{
  try
  {
    *** insertImage call goes here ***
    insertSuccess = true;
  }
    catch (e)
  {
    console.log(e.message);
    insertImageErrorMessage=e.message;
  }
}

编辑警告!!!

这似乎是由谷歌服务器端的某种“垃圾邮件保护”引起的。 我首先尝试插入定时延迟以避免收到错误消息,并且在不成功之后才转向这个 hack 解决方案。 要么我尝试的延迟太小,要么谷歌只是对任意数量的 imageInsert 请求感到不安 - 可能。

上面的解决方案在一段时间内工作得很好,然后突然(如该线程中所述, 脚本突然停止工作但在其他工作表中工作)所有对 insertImage 的请求都被拒绝,并显示相同的错误消息。 据我所知,一旦发生这种情况 - 它就是永久性的。

值得庆幸的是,它似乎与文档 ID 相关联 - 所以制作一个新副本(或者可能恢复到以前的版本,OP 在上面的链接线程中使用的解决方案)解决了这个问题 - 至少直到你再次点击它。

如果有一个“正确的”/“批准的方法来做到这一点,我不知道它是什么并且在文档中找不到任何关于它的东西。如果你知道的话请在这里评论!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM