- Вы хотите поместить файлы изображений с вашего Google Диска в электронную таблицу по формуле
IMAGE()
. - Вы хотите добиться этого с помощью Google Apps Script.
Если мое понимание верно, как насчет этого ответа? Думайте об этом как об одном из нескольких возможных ответов.
Проблема и обходное решение:
К сожалению, файлы изображений на 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()
.
Примечание:
Ссылка:
Добавлено :
Пожалуйста, измените значение для 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)
изменяют размер ячейки.