Как насчет этого ответа?
Гипотеза и эксперимент:
Из моего эксперимента в электронной таблице, когда изображение вставляется с помощью insertImage()
в таблице классов, ограничение связано с областью изображения (в пикселях ^ 2), а не с размером его файла , Максимальная площадь изображения, которое можно вставить, составляет 1 048 576 пикселей ^ 2. Ref
Исходя из этой ситуации, я подумал, что ваша проблема также связана со случаем Spreadsheet. Ограничение insertImage()
в теле класса может быть связано с областью изображения. Поэтому я экспериментировал следующим образом.
В результате было установлено, что ограничение области составляет 25 000 000 пикселей ^ 2.
О вашей проблеме:
В вашем случае размер общего изображения составляет 6240 x 4160 пикселей. Эта область составляет 25 958 400 пикселей ^ 2. Эта область больше, чем значение (25 000 000 пикселей ^ 2), полученное выше эксперимента. При этом считается, что ошибка возникает.
Обход:
Чтобы обойти это ограничение, как насчет этого обходного пути? В этом временном решении, когда размер изображения превышает 25 000 000 пикселей ^ 2, размер изображения уменьшается с помощью Drive API. Модифицированный скрипт выглядит следующим образом.
Модифицированный скрипт:
function myFunction() {
var folder = DriveApp.getFolderById(id);
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
var img = file.getBlob();
// --- Following script was added.
var url = "https://www.googleapis.com/drive/v3/files/" + file.getId() + "?fields=imageMediaMetadata(height%2Cwidth)%2CthumbnailLink&access_token=" + ScriptApp.getOAuthToken();
var res = UrlFetchApp.fetch(url).getContentText();
var obj = JSON.parse(res);
if (obj.imageMediaMetadata && (obj.imageMediaMetadata.width * obj.imageMediaMetadata.height) > 25000000) {
var width = 1000;
var tlink = obj.thumbnailLink.replace(/=s\d+/, "=s" + width);
img = UrlFetchApp.fetch(tlink).getBlob();
}
// ---
var imgDoc = DocumentApp.getActiveDocument().getBody().insertImage(0, img);
}
}
- В этой модификации, в качестве примера, размер изображения уменьшен с шириной 1000 пикселей. Если вы хотите изменить это, пожалуйста, измените
var width = 1000
.
- Я думаю, что в вашем скрипте Drive API уже был автоматически включен, потому что используется класс DriveApp. Но если возникает ошибка, связанная с Drive APi, проверьте, включен ли Drive API на консоли API.
Ссылки: