Google apps script 使用Google Apps脚本将图像从驱动器插入Google Spresheet单元格

Google apps script 使用Google Apps脚本将图像从驱动器插入Google Spresheet单元格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,关于这个话题,我已经通读了所有的线索。从blob到URL等等,通过应用程序脚本将图像插入到单元格中,但似乎没有任何效果。而且大多数帖子都没有很好地制定出解决方案来追溯错误。所以我想找到我问题的答案。下面是我的代码。我还想讨论不同方法的优点。就我所见,在处理已经存在于G-Drive中的图像时,Blob似乎是最容易的方法之一 function getGDriveFilesIntoCell() { var dApp = DriveApp; // Store GDrive App in a fu

关于这个话题,我已经通读了所有的线索。从blob到URL等等,通过应用程序脚本将图像插入到单元格中,但似乎没有任何效果。而且大多数帖子都没有很好地制定出解决方案来追溯错误。所以我想找到我问题的答案。下面是我的代码。我还想讨论不同方法的优点。就我所见,在处理已经存在于G-Drive中的图像时,Blob似乎是最容易的方法之一

function getGDriveFilesIntoCell() {

  var dApp = DriveApp;  // Store GDrive App in a function
  var folderIter = dApp.getFoldersByName("Training_folder");  // Get folder by name
  var foundfolder = folderIter.next();  // next allows to Iterate through the found folders
  Logger.log(foundfolder);  // Print into the logs the found folder of foundfolder

  var ss = SpreadsheetApp.getActiveSpreadsheet(); //.getActiveSheet();  // Calls the Spreadsheet App and the current active Spreadsheet
  var sheet = ss.getSheets()[0];  // Get first sheet

  var filesIter = foundfolder.getFiles();  // Get files in found folder

  var i = 1;  // Define a var with value 1

  while(filesIter.hasNext()){  // While loop for all files in folder found by name
    var file = filesIter.next();
    var filename = file.getName();  // Get Name
    var filesize = file.getSize() / 1024;  // Get size in kb
    var file_id = file.getId();  // Get ID
    var file_url = file.getUrl();  // Get Url to file
    sheet.insertImage(file.getBlob(), i, 1);  // Insert Image
    Logger.log(filename + filesize + file_id);
    Logger.log(filesize);
    Logger.log(file_id);
    i++;  // increment i by one

    // file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW)  // Set file permission

    // var file_blob = file.getBlob();  // Get blob

    // Insert Image via custom bblob
    // var file_mime_type = file.getMimeType();  // Get Mime Type
    // var response = UrlFetchApp.fetch(file_url);
    // var binaryData = response.getContent();
    // var blob = Utilities.newBlob(binaryData, file_mime_type, filename);
    // sheet.insertImage(blob, i, 1);

    // Inser image via Link
    // ss.getRange(i, 1).setValue("=image(\"https://drive.google.com/uc?export=view&id=" + file.getId() +"\")");  // Adds an Image via Link
    // var img = Drive.Files.get(file.getId()).webContentLink;
  }

}

我相信你的目标如下

  • 您希望使用带有blob的
    insertImage
    将图像放入谷歌电子表格
  • 您希望从特定文件夹中检索图像
对于这个问题,这个答案如何

修改点:
  • 将图像放入电子表格时,请注意以下几点。
  • 在脚本中,当图像以外的文件包含在
    Training\u文件夹
    的文件夹中时,会发生错误
  • 当图像大小超过最大限制时,将发生错误
我想这可能是你问题的原因。因此,我想提出以下修改

修改脚本: 修改脚本时,请按以下方式修改在这次修改中,使用了“ImgApp”,即谷歌应用程序脚本库。因此,在运行脚本之前,请安装GAS库。您可以在上查看如何安装。

发件人: 致:
  • 在这个修改后的脚本中,将检索图像文件。并且,当图像大小超过电子表格的最大大小时,将调整图像的大小
注:
  • 从脚本中,可以使用不带V8的脚本。所以我修改了它
参考资料:
    • 在本线程中,讨论了将图像放入电子表格的限制
    • 可以从图像的blob中检索该气体库,并且可以调整图像的大小

我的回答是否向您展示了您想要的结果?你能告诉我这件事吗?这对我的学习也很有用。如果这样做有效,其他与你有相同问题的人也可以将你的问题作为可以解决的问题。如果你对我的回答还有疑问,我道歉。那时候,我可以问一下你目前的情况吗?我想学习解决你的问题。在这个问题上花了几个小时之后,这是唯一对我有效的解决方案。谢谢@Tanaike@Sergio谢谢你的评论。我很高兴我的回答对你的情况有用。也谢谢你。
while(filesIter.hasNext()){  // While loop for all files in folder found by name
  var file = filesIter.next();
  var filename = file.getName();  // Get Name
  var filesize = file.getSize() / 1024;  // Get size in kb
  var file_id = file.getId();  // Get ID
  var file_url = file.getUrl();  // Get Url to file
  sheet.insertImage(file.getBlob(), i, 1);  // Insert Image
  Logger.log(filename + filesize + file_id);
  Logger.log(filesize);
  Logger.log(file_id);
  i++;  // increment i by one
}
while(filesIter.hasNext()){
  var file = filesIter.next();
  if (file.getMimeType().indexOf("image") != -1) {
    var blob = file.getBlob();
    var size = ImgApp.getSize(blob);
    if (size.width * size.height > 1048576) {
      var resized = ImgApp.doResize(file.getId(), 512);
      blob = resized.blob;
    }
    sheet.insertImage(blob, i, 1);  // Insert Image
    i++;  // increment i by one
  }
}