Вставьте изображение в ячейку таблицы Google с диска, используя скрипт Google Apps - PullRequest
0 голосов
/ 28 апреля 2020

Я пробился через все темы об этом топи c. От BLOB-объекта до URL-адресов и т. Д. Для вставки изображения в ячейку с помощью приложения-скрипта, но, похоже, ничего не работает. И большинство постов не получили достаточно четкое решение для отслеживания ошибок. Поэтому я пытаюсь получить ответ на мою проблему здесь. Ниже мой код. Я также хотел бы обсудить преимущества различных методов. Насколько мне известно, BLOB-объект является одним из самых простых при работе с изображениями, уже существующими в G-Drive.

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;
  }

}

1 Ответ

1 голос
/ 28 апреля 2020

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите поместить изображения в электронную таблицу Google, используя insertImage с BLOB-объектов.
  • Вы хотите получить изображения из указать c папка.

Для этого как насчет этого ответа?

Точки изменения:

  • Когда изображение помещается в электронную таблицу, пожалуйста, будьте осторожны в следующих пунктах.
    1. В вашем скрипте, когда файлы, кроме изображения, включены в папку Training_folder, возникает ошибка.
    2. Если размер изображений превышает максимальное ограничение, возникает ошибка происходит. Ссылка

Я подумал, что это может быть причиной вашей проблемы. Поэтому я хотел бы предложить следующую модификацию.

Модифицированный скрипт:

Когда ваш скрипт модифицируется, пожалуйста, измените его следующим образом. В этой модификации используется ImgApp, которая является библиотекой скриптов Google Apps. Поэтому, прежде чем запускать скрипт, пожалуйста, установите библиотеку GAS. Вы можете увидеть, как установить его на здесь .

От:

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
  }
}
  • В этом измененном сценарии файлы изображений извлекаются. А когда размер изображения превышает максимальный размер электронной таблицы, размер изображения изменяется.

Примечание:

  • Из вашего сценария вы можете использовать сценарий без V8 , Поэтому я изменил его.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...