将图像从 Google 文档保存到 Google 驱动器 - Google 应用程序脚本

Save the images from a Google Doc to Google Drive - Google App Script

我正在尝试将图像从 Google 文档下载到我的个人 Google 驱动器。 我用了 运行 一分钟,但是当我将工作代码放入循环中以捕获 all 我文档中的图像时,我遇到了一个错误。代码停止将图像保存到我的驱动器,并开始保存 4k 大小的空文件,而且绝对不是我正在寻找的 .png。我比较肯定我没有达到我的每日配额,你们能理解吗?

期待您的回复。

这是我的非功能函数:

function imageExtract() {
  var documentName = "googleDoc";
  var wd = DocumentApp.openById("<GOOGLE DOC ID>");

  var imgCount = wd.getBody().getImages().length;                      // get the number of images
  
  for (var i = 0; i < imgCount; i++){
    var images = wd.getBody().getImages()[i].getAs('image/png');       // get the image blob at index 'i'
    var save = DriveApp.createFile((documentName + '-' + i), images);  // name + save the image to drive
    var imgUrl = save.getUrl();

    Logger.log('Saved Image ' + (documentName + '-' + i) + ": " + imgUrl); 
  }
}

修改点:

  • 在您的脚本中,我认为 DriveApp.createFile((documentName + '-' + i), images) 不正确。在您的情况下,images 是一个 blob。所以在这种情况下,需要使用createFile(blob)。对于createFile(name, content),要求content为字符串类型。我认为这就是您遇到问题的原因。
  • wd.getBody().getImages() 已经在 for 循环外使用了。所以我认为这个可以在循环中使用。
  • wd.getBody().getImages() 检索 blob 时,mimeType 默认为 image/png

当以上几点反映到你的脚本中,就变成了下面这样。

修改后的脚本:

function imageExtract() {
  var documentName = "googleDoc";
  var wd = DocumentApp.openById("<GOOGLE DOC ID>");
  var images = wd.getBody().getImages();
  var imgCount = images.length;
  for (var i = 0; i < imgCount; i++){
    var image = images[i].getBlob().setName(documentName + '-' + i);
    var save = DriveApp.createFile(image);
    var imgUrl = save.getUrl();
    Logger.log('Saved Image ' + (documentName + '-' + i) + ": " + imgUrl);
  }
}

参考文献:

对于试图从 Google 文档或幻灯片下载图像的任何访问此页面的人,这是我发现的有效方法:

  1. 右键单击并select“保存以保留”

  1. 转到 Keep,您现在可以执行“将图像另存为...”