У меня есть список изображений, на которые я ссылаюсь, используя их имена файлов:
=image("domainname.com/somepath/"&A2&".jpg")
где в A2 имя файла.
К сожалению, некоторые из этих изображений имеют расширение .png. Я пытаюсь найти решение, чтобы проверить правильность файла с расширением jpg и найти изображение. Если не найдено, я хочу использовать
=image("domainname.com/somepath/"&a2&".png")
Для этой ячейки.
Формулы IFNA и IFERROR не работают. Я также попытался объединить формулы:
=image("domainname.com/somepath/"&a2&".png")&image("domainname.com/somepath/"&a2&".jpg")
но я вижу, что вы можете использовать & только для строк
В разных папках есть тысячи изображений для справки, и я не могу контролировать их формат. Есть ли у вас какие-либо идеи?
Я бы предложил один обходной путь — создать и использовать пользовательскую функцию для проверки URL-адреса изображения.
Пример пользовательской функции:
/**
* validate image
*
* @param {input} image url to validate.
*
* @customfunction
*/
function IMAGE_TRY(input) {
try{
var response = UrlFetchApp.fetch(input);
return 1;
} catch(err) {
return 0;
}
}
Обратите внимание, что тег @customfunction важен в комментарии к функции, чтобы эта настраиваемая функция отображалась как предлагаемая формула при вводе в ячейку.
После того, как вы создали пользовательскую функцию, вы можете использовать ее для проверки URL-адреса и использования правильного URL-адреса изображения с помощью функции IF.
Образец:
=IF(IMAGE_TRY("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_160x56dp.jpg"),image("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_160x56dp.jpg"), image("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_160x56dp.png"))
Пример вывода:
(ОБНОВЛЯТЬ)
ОПТИМИЗИРОВАННОЕ РЕШЕНИЕ:
Пример пользовательской функции:
/**
* get image url with correct file extension.
*
* @param {input} image url string without extension.
*
* @customfunction
*/
function getURL(input) {
try{
var response = UrlFetchApp.fetch(input+".jpg");
return (input.concat(".jpg"));
} catch(err) {
return (input.concat(".png"));
}
}
Формула листов:
=image(getURL("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_160x56dp"))
Если это имеет какую-либо дополнительную ценность, вот статья, которая проведет вас по той же логике, описанной выше, возможно, более подробно, но это тот же ответ, который Рон уже предоставил. medium.com/@the.benhawy/…
Отличный ответ! Добро пожаловать !
@KrzysztofDołęgowski, я добавил оптимизированное решение, которое уменьшит формулу, необходимую для получения правильного изображения. Не стесняйтесь выбирать, какое решение вы предпочитаете.
Пожалуйста. Я рад, что смог помочь