Google Apps脚本:InsertImage()函数不起作用

时间:2019-09-10 02:27:26

标签: google-apps-script google-sheets

我正在尝试将驱动器中的png图像粘贴到电子表格中。 很多文章都说Sheet类上的insertImage()可以实现这一点,但是当我运行下面的代码时,在调用insertImage()的过程中,我不断收到服务错误。 我在Google上搜索了它,也在这里查找了它,但是还没有找到解决方案。 我在做什么错了?

 function pastePhotosFromDrive(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("画像");

 var folderId = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
 var files = DriveApp.getFolderById(folderId).getFiles();
 var row = 1;
 var col = 1;

 Logger.log(files);
//  var file1 = files.next();
//  var blob1 = file1.getBlob());

 while(files.hasNext()){
   var file = files.next();
   var blob = file.getBlob();
   sheet.insertImage(blob, col, row);

   row += 3;

   if(row >= 25){
     col = 0;
     row += 20;
   }
 } 
}

1 个答案:

答案 0 :(得分:2)

这个答案怎么样?

问题和解决方法:

我认为在您的情况下,可能会发生以下两种情况。

  1. 该文件不是图像文件。
  2. 图像尺寸可能超过最大尺寸。在电子表格中,当图像区域大于1,048,576像素^ 2时,会发生错误。 Ref1Ref2

作为几种解决方法之一,我建议通过选择图像文件来修改图像的大小。

修改后的脚本:

修改脚本后,请进行以下修改。

使用此脚本之前,请please enable Drive API at Advanced Google Services

发件人:

while(files.hasNext()){
  var file = files.next();
  var blob = file.getBlob();
  sheet.insertImage(blob, col, row);

  row += 3;

  if(row >= 25){
    col = 0;
    row += 20;
  }
}

收件人:

while(files.hasNext()){
  var file = files.next();

  if (file.getMimeType().indexOf("image") > -1) { // Here, the image file is selected.
    var blob;
    var obj = Drive.Files.get(file.getId());
    var imageMetadata = obj.imageMediaMetadata;
    if (imageMetadata.height * imageMetadata.width > 1048576) {
      var width = 500; // Here, as a test case, 500 pixels is used for the width.
      var tlink = obj.thumbnailLink.replace(/=s\d+/, "=s" + width);
      blob = UrlFetchApp.fetch(tlink).getBlob();
    } else {
      blob = file.getBlob();
    }

    sheet.insertImage(blob, col, row);

    row += 3;

    if(row >= 25){
      col = 0;
      row += 20;
    }
  }
}
  • 在此修改后的脚本中,选择了图像文件,并且当图像大小超过最大限制时,大小会变小。然后,插入修改后的图像。
    • 在这里,作为测试用例,使用500像素作为修改后的宽度。

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。