= ИЗОБРАЖЕНИЕ ("url") с заданной высотой и автоматической шириной для сохранения соотношения сторон
У меня есть столбец URL-адресов изображений, которые имеют различные соотношения сторон, я преобразовываю их в изображения с помощью =IMAGE("url"), но хотел бы, чтобы у всех них была указанная высота при сохранении соотношения сторон.
Мне бы хотелось, чтобы между строками было немного пустого пространства, т.е. их высота была бы немного больше, чем высота изображения, поэтому первый вариант не помог, и я не знаю, как использовать параметр "auto" width, используя параметр 4.
1 ответ
Используйте скрипт и формулу
Одним из возможных способов является использование скрипта:
- найти
width / height
с помощью скрипта - Используйте простой
image
функция
Я не нашел простой способ получить размеры изображения в скрипте листов Google. Таким образом, это решение не может быть использовано в пользовательской формуле. Единственный способ запустить скрипт - это сделать его напрямую или назначить его кнопке. Посмотрите на пример:
В моем примере файла вы можете вставить URL-адрес вашего изображения в столбец A, а затем нажмите картинку (кнопка), чтобы обновить width / height
параметр. Это займет некоторое время, в зависимости от количества фотографий.
Формула в ячейке C2: =IMAGE(A2,4,26,26*B2)
,
Вы также можете сделать это arrayFormula, если хотите, используйте: =ArrayFormula(IMAGE(A2:A11,4,26,26*B2:B11))
Номер 26 - это правильная высота картинки в моем случае, измените ее в соответствии с вашими потребностями.
Требуемый код:
function returnDims(){
var sheet = SpreadsheetApp.getActiveSheet();
var lRow = sheet.getLastRow();
var imgUrl = '';
for (var i = 2; i <= lRow; i++) {
r1 = sheet.getRange(i, 1);
imgUrl = r1.getValue();
if (imgUrl != ''){
imageSize(imgUrl, i, 2);
Utilities.sleep(2000);
}
}
}
function imageSize(imgUrl, r, c) {
if (typeof imgUrl == 'undefined') {
imgUrl = 'http://www.google.com/intl/en_ALL/images/logo.gif';
}
var t = '';
t += '<script>\n';
t += 'function hd(){\n';
t += 'var img = new Image();\n';
t += 'img.onload = function() {\n';
t += "google.script.run.returnVal(this.width / this.height, " + r + ", " + c + ");\n";
t += '}\n';
t += "img.src = '" + imgUrl + "';\n";
t += '}\n';
t += 'google.script.run.withSuccessHandler(google.script.host.close)\n';
t += '.returnVal(hd(), ' + r + ', ' + c + ');\n';
t += '</script>\n';
var output = HtmlService.createHtmlOutput(t);
output.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi().showModalDialog(output,'please, wait...');
output.clear();
}
function returnVal(h, r, c) {
Logger.log(h);
var sheet = SpreadsheetApp.getActiveSheet();
var R = sheet.getRange(r, c);
if (h != '') {
R.setValue(h);}
}
Если ваши изображения большие, вам может понадобиться увеличить паузу в этом коде: Utilities.sleep(2000);
к большему числу.
Referencies
Я позаимствовал хороший код у:
Надеюсь, это поможет и ждет лучших решений!