Вставка изображения из Google Диска или из URL в Google Sheets с помощью скрипта Google Apps - PullRequest
1 голос
/ 31 января 2020

Я использовал этот скрипт ниже для вставки изображений из URL в указанные ячейки в Google Sheets, однако он не будет работать для URL изображений, содержащихся в Google Диске.

//If any graphic is a URL, insert that URL into the corresponding cell in the Briefing tab.
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getSheetByName("main_gen").getRange("ImageRange").getValues();
  var dstSheet = ss.getSheetByName("Briefing");
  for (var num = 0; num < source.length; num ++) {
    if (/https?:\/\//.test(source[num][0])) { //Check to ensure a URL has been entered.
      var graphicformula = '=IMAGE("' + source[num][0] + '",1)';
      dstSheet.getRange(graphics_placements[num]).setFormula(graphicformula);
    }
  }

Пользователь вводит URL изображений в заранее определенном количестве ячеек на одной вкладке. В зависимости от выбранного ими порядка (может быть от 1 до 5 изображений) изображения вставляются в указанные ячейки на другой вкладке. Как можно переписать приведенный выше код, чтобы учесть как URL-адрес, подобный этому (https://google.com/image.png), так и такой (https://drive.google.com/open?id=12Au6IQE9l9X_hzM5n87Fs9gajJ)?

Спасибо!

1 Ответ

1 голос
/ 31 января 2020

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

Проблема и обходное решение:

К сожалению, файлы изображений на Google Диске нельзя напрямую поместить в электронную таблицу с помощью IMAGE(). В этом случае файлы изображений должны быть общедоступными. Таким образом, в этом ответе файлы открыты для общего доступа и помещены в электронную таблицу.

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

Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.

From:
for (var num = 0; num < source.length; num ++) {
  if (/https?:\/\//.test(source[num][0])) { //Check to ensure a URL has been entered.
    var graphicformula = '=IMAGE("' + source[num][0] + '",1)';
    dstSheet.getRange(graphics_placements[num]).setFormula(graphicformula);
  }
}
Кому:
for (var num = 0; num < source.length; num ++) {
  if (/https?:\/\//.test(source[num][0])) { //Check to ensure a URL has been entered.
    var res = source[num][0].match(/drive\.google\.com\/open\?id=(\w.+)|drive\.google\.com\/file\/d\/(\w.+)\//);
    if (res && res.length > 0) {
      var id = res[1] || res[2];
      var file = DriveApp.getFileById(id);
      if (file.getOwner().getEmail() != Session.getActiveUser().getEmail()) {
        file = file.makeCopy(DriveApp.getRootFolder());
      }
      file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
      source[num][0] = "https://drive.google.com/uc?export=download&id=" + id;
    }
    var graphicformula = '=IMAGE("' + source[num][0] + '",1)';
    dstSheet.getRange(dstSheet.getLastRow() + 1, 1).setFormula(graphicformula);
  }
}
  • В этом примере, когда владелец файла отличается от вас, файл копируется в папку root вашего Google Диска. Если вы хотите поместить указанную папку c, измените DriveApp.getRootFolder().

Примечание:

  • Если URL-адреса, за исключением шаблона https://drive.google.com/open?id=###, являются включите, пожалуйста, покажите примеры URL.

Ссылка:

Добавлено :

Пожалуйста, измените значение для l oop в вашем скрипте следующим образом.

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

var scale = 0.5; // In this case, the imported image is reduces with 50 % from the original size.
var n = 0;
var cellWidth = 0;
for (var num = 0; num < source.length; num ++) {
  if (/https?:\/\//.test(source[num][0])) { //Check to ensure a URL has been entered.
    var res = source[num][0].match(/drive\.google\.com\/open\?id=(\w.+)|drive\.google\.com\/file\/d\/(\w.+)\//);
    var blob = res && res.length > 0 ? DriveApp.getFileById(res[1] || res[2]).getBlob() : UrlFetchApp.fetch(source[num][0]).getBlob();
    var lastRow = dstSheet.getLastRow() + 1 + n++;
    var image = dstSheet.insertImage(blob, 1, lastRow);
    var imageWidth = image.getWidth() * scale;
    var imageHeight = image.getHeight() * scale;
    cellWidth = cellWidth > imageWidth ? cellWidth : imageWidth;
    image.setWidth(imageWidth);
    image.setHeight(imageHeight);
    dstSheet.setRowHeight(lastRow, imageHeight);
  }
}
dstSheet.setColumnWidth(1, cellWidth);
  • В этом случае изображение помещается на камеру. Это не в клетке. Поэтому, когда вы хотите сопоставить размер изображения с размером ячейки, размер ячейки необходимо изменить. В приведенном выше сценарии dstSheet.setRowHeight(lastRow, imageHeight) и dstSheet.setColumnWidth(1, cellWidth) изменяют размер ячейки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...