искать название страны и возвращать изображение флага в ячейку в Google Sheets

У меня есть список из 245 стран. .

Можно ли каким-либо образом использовать ВПР в Google Таблицах для импорта соответствующих флагов?

Я подумывал о потенциальном использовании такого ресурса, как Wiki или http://www.theodora.com/flags/ но не уверен, что смогу?


person user1721451    schedule 02.08.2017    source источник


Ответы (2)


Шаг 1. Получите ссылки

A1 = http://www.sciencekids.co.nz/pictures/flags.html

B1 = //@src[contains(.,'flags96')]

A3 = =IMPORTXML(A1,B1)

Шаг 2. Использовать функцию изображения

B3 = =IMAGE(substitute(A3,"..","http://www.sciencekids.co.nz"))

Бонус. Имя страны:

C1 = ([^/.]+)\.jpg$

C3 = =REGEXEXTRACT(A3,C1)

введите здесь описание изображения

person Max Makhrov    schedule 02.08.2017
comment
Большое спасибо, это потрясающе - person user1721451; 03.08.2017
comment
Отличный ответ! К сожалению, ссылка на флаг теперь не работает - person EstevaoLuis; 31.07.2020
comment
@EstevaoLuis Спасибо! Я обновил ответ. Решение отличается, но рабочий процесс и результат одинаковы - person Max Makhrov; 31.07.2020

Обновлять:

Написав это и немного погуглив, я нашел следующие API:

Что позволило мне вместо этого создать эту однострочную формулу:

=IMAGE(CONCATENATE("https://www.countryflags.io/", REGEXEXTRACT(INDEX(IMPORTDATA(CONCAT("https://restcountries.eu/rest/v2/name/", F3)), 1, 3),"""(\w{2})"""), "/flat/64.png"))

(если кто-нибудь знает, как лучше импортировать и анализировать json в Google Таблицах, дайте мне знать)

Поскольку это официальные API, а не sciencekids.co.nz, теоретически они обеспечивают следующие преимущества:

  • Немного правильнее использовать специально созданный API, чем какой-то случайный веб-сайт.
  • Maybe slightly more "future proof"
    • Availability: more likely to be available in the future
    • Обновлено/техническое обслуживание: более вероятно, что оно будет обновлено для включения новых стран/обновленных флагов.

Но есть большой недостаток: кажется, что он ограничен изображениями шириной 64 пикселя (даже изначально опубликованное решение sciencekids предоставляло изображения шириной 96 пикселей). Поэтому, если вам нужны изображения более высокого качества, вы можете адаптировать исходную формулу к:

=IMAGE(SUBSTITUTE(SUBSTITUTE(QUERY(IMPORTXML("http://www.sciencekids.co.nz/pictures/flags.html","//@src[contains(.,'flags96')]"),CONCATENATE("SELECT Col1 WHERE Col1 CONTAINS '/", SUBSTITUTE(SUBSTITUTE(A1, " ", "_"), "&", "and") ,".jpg'")),"..","http://www.sciencekids.co.nz"), "flags96", "flags680"))

который предоставляет изображения шириной 680 пикселей на сайте sciencekids.co.nz. (Если кто-нибудь найдет API, который предоставляет изображения более высокого качества, сообщите мне. Он должен быть там)

Исходное сообщение:

Чтобы добавить к потрясающему ответу Макса, вот все это в одной функции:

=IMAGE(SUBSTITUTE(QUERY(IMPORTXML("http://www.sciencekids.co.nz/pictures/flags.html","//@src[contains(.,'flags96')]"),CONCATENATE("SELECT Col1 WHERE Col1 CONTAINS '/", SUBSTITUTE(SUBSTITUTE(A1, " ", "_"), "&", "and") ,".jpg'")),"..","http://www.sciencekids.co.nz"))

(Если кто-то хочет немного упростить это, будьте моим гостем)

Поместите это в A2 и введите название страны в A1 (например, Турция или Босния и Герцеговина), и он покажет флаг для вашего поиска.

person derekantrican    schedule 29.06.2021