<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Maxim Arbuzov</title><subtitle>stRAW Analytics</subtitle><author><name>Maxim Arbuzov</name></author><id>https://teletype.in/atom/maxarbuzov</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/maxarbuzov?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@maxarbuzov?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxarbuzov"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/maxarbuzov?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-10-23T01:52:20.302Z</updated><entry><id>maxarbuzov:upload_from_googlesheets_to_bigquery</id><link rel="alternate" type="text/html" href="https://teletype.in/@maxarbuzov/upload_from_googlesheets_to_bigquery?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxarbuzov"></link><title>Загрузка данных из Google Sheets в BigQuery</title><published>2021-07-09T11:54:25.114Z</published><updated>2021-07-09T11:54:25.114Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/30/f3/30f33fea-d79e-4bf7-8a32-215da22c029b.png"></media:thumbnail><category term="google-sheets" label="GoogleSheets"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/dd/1b/dd1b4fa9-faf6-4917-83e2-4bb220320d61.png&quot;&gt;Иногда, а зачастую всегда, если вы работаете с отчетами по требованию от менеджеров, возникает необходимость объединить данные из гугл таблицы и той базой что уже у вас есть в бигквери. Например, менеджер себе в гугл таблице набросал периоды какой-либо акции или распродажи и вам нужно вытащить данные за этот период. </summary><content type="html">
  &lt;p&gt;Иногда, а зачастую всегда, если вы работаете с отчетами по требованию от менеджеров, возникает необходимость объединить данные из гугл таблицы и той базой что уже у вас есть в бигквери. Например, менеджер себе в гугл таблице набросал периоды какой-либо акции или распродажи и вам нужно вытащить данные за этот период. &lt;/p&gt;
  &lt;p&gt;Сделать это можно несколькими способами, в зависимости от того надо ли вам чтобы ваши данные из таблицы периодически обновлялись или же это будет единоразовая выгрузка. &lt;/p&gt;
  &lt;p&gt;Представим что у вас есть таблица, содержащая айдишку и какой-либо набор параметров. В примере мне, конечно же, было лень создавать большой файл, поэтому я ограничился одной строкой. В реальности у вас будет файл гораздо большего размера, но сути это не меняет&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure class=&quot;m_retina&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/dd/1b/dd1b4fa9-faf6-4917-83e2-4bb220320d61.png&quot; width=&quot;448&quot; /&gt;
      &lt;figcaption&gt;Пример таблицы для импорта из Google Sheets в BigQuery&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;h3&gt;Загрузка данных через CSV&lt;/h3&gt;
  &lt;p&gt;Здесь все понятно. Скачиваем наш лист с данными из гугл таблицы в формате CSV. &lt;br /&gt;Открываем в нашей таблице меню Файл - Скачать - CSV файл. &lt;/p&gt;
  &lt;p&gt;Этот вариант отлично подойдет если данные нужно загрузить единоразово.&lt;br /&gt;Поскольку пример я составлял из под рабочей учетки - все конфиденциальные, не побоюсь этого слова, данные на картинках будут замазаны черным цветом. Другого цвета под рукой не оказалось.&lt;/p&gt;
  &lt;p&gt;Идем в настройки своего датасета BQ&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure class=&quot;m_retina&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/ab/43/ab432365-d1a3-4da6-addb-809af8dd1561.png&quot; width=&quot;288.5&quot; /&gt;
      &lt;figcaption&gt;Открываем настройки датасета в BigQuery&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p&gt;создаем новую таблицу: create table - upload - csv.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure class=&quot;m_retina&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/00/e7/00e76cdd-ed57-4a2f-b90c-4718da15449e.png&quot; width=&quot;1078&quot; /&gt;
      &lt;figcaption&gt;Создаем новую таблицу&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure class=&quot;m_retina&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/23/a7/23a7bbc5-ce7d-4536-929b-dde0f6998ce6.png&quot; width=&quot;696&quot; /&gt;
      &lt;figcaption&gt;Загружаем CSV файл в BQ&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p&gt;В целом, грузить данные через csv в целом можно, но есть ограничение на размер файла(100MB). Если файл больше то надо уже заморочаивтаьс яи грузить его через cloud storage.  &lt;br /&gt;Но если вам понадобится эти данные периодически обновлять, то такой вариант уже не подойдет, поскольку каждый раз придется пересоздавать таблицу и грузить данные заново, а это в общем-то так себе развлечение. &lt;br /&gt;Поэтому есть второй более удобный метод, о котором я сам, к своему стыду, узнал недавно, потому что никогда не скролил ниже варианта загрузки через цсв.&lt;/p&gt;
  &lt;h3&gt;Подключаем google sheets к bigquery&lt;/h3&gt;
  &lt;p&gt;Процесс такой же, как и в случае, с CSV файлом, только в списке вариантов загрузки выбираем drive и вставляем ссылку на нашу гугл таблицу.  Дополнительно можно указать диапазон который мы хотим импортировать, а также обязательно, как и в случае с csv, указываем что нам нужно пропустить первую строку в качестве заголовка и автоматически создать схему таблицы. &lt;br /&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure class=&quot;m_retina&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/01/54/015482ce-7a6f-42c2-b3e7-b5f0004df8eb.png&quot; width=&quot;745&quot; /&gt;
      &lt;figcaption&gt;Подключаем Google Sheets к GBQ&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p&gt;Наша таблица импортировалась, но здесь как раз и есть один момент,на котором я застопорился и долго думал что моя таблица импортировалась неправильно. Импортированная таблица не импортируется целиком, в классическом понимании, как в случае с импортом через csv, а как бы связывается. Поэтому вы можетет увидеть, что размер вашей таблицы равен нулю. И сделать превью данных тоже не получится в таком случае.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure class=&quot;m_retina&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/d9/02/d902ab61-95d1-4435-8648-ffcf11958a75.png&quot; width=&quot;937&quot; /&gt;
      &lt;figcaption&gt;Настройки импортированной таблицы.&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p&gt;Но если написать простой селект запрос то данные в результаты подтянутся.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure class=&quot;m_retina&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/69/d9/69d9fb20-f316-45a0-8954-f6ffeefbd9b4.png&quot; width=&quot;1072&quot; /&gt;
      &lt;figcaption&gt;Данные из гугл таблицы в результатах запроса бигквери&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p&gt;Как видим из запроса данные отобразились. Теперь вы можете джойнить эту таблицу к любым данным и ссылаться на нее в своих запросах как на обычную таблицу BQ, а ваш менеджер будет счастлив.&lt;/p&gt;
  &lt;p&gt;Главное напишите понятную инструкцию и следите чтобы данные в гугл таблицу вносили корректно. А то будет как у меня, когда в столбце для даты вместо нужного формата 2021-03-20 написали просто 20 марта. Зашибись, че. &lt;/p&gt;

</content></entry><entry><id>maxarbuzov:emails_extract_in_google_sheets_or_r</id><link rel="alternate" type="text/html" href="https://teletype.in/@maxarbuzov/emails_extract_in_google_sheets_or_r?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxarbuzov"></link><title>Извлекаем email адреса из текста при помощи Google Sheets или R</title><published>2020-12-28T14:04:15.648Z</published><updated>2020-12-28T14:53:03.127Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/da/2b/da2b8290-afdb-4f9e-a645-e214ec8f77b1.png"></media:thumbnail><category term="google-sheets" label="GoogleSheets"></category><summary type="html">&lt;img src=&quot;https://teletype.in/files/2c/41/2c411499-37bd-47f5-9600-b140617e88be.jpeg&quot;&gt;Предположим что у вас есть задача извлечь адреса электронных почт из ячеек, в которых кроме имейлов содержится и другая информация в текстовом формате. </summary><content type="html">
  &lt;p&gt;Предположим что у вас есть задача извлечь адреса электронных почт из ячеек, в которых кроме имейлов содержится и другая информация в текстовом формате. &lt;/p&gt;
  &lt;p&gt;Это можно сделать тремя способами: &lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Руками &lt;/strong&gt;- мы понятно его рассматривать не будем. Хотя если есть чужие и очень дешевые руки, а также непреодолимое желание почувствовать себя рабовладельцем - то конечно можно. Кто я такой чтобы запрещать?&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Через Google Sheets&lt;/strong&gt; - наиболее оптимальный и с низким порогом вхождения.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Через язык программирования R&lt;/strong&gt; - тот же результат, но изящнее и проще реализовывается, если необходимо работать с большим количеством однотипных файлов. &lt;/p&gt;
  &lt;h3&gt;Данные для работы&lt;/h3&gt;
  &lt;p&gt;В моем примере есть небольшой файл, который содержит выгрузку аккаунтов из instagram с описанием из шапки профиля(description или biography кто как называет). Из этого поля мы и будем извлекать имейлы. &lt;/p&gt;
  &lt;p&gt;Небольшой файл с примером доступен &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1yYKssONDRhFDAeM3W8fZ3CVuXInc0KqJnz6Slg43Eko/edit?usp=sharing&quot; target=&quot;_blank&quot;&gt;по ссылке&lt;/a&gt;&lt;/p&gt;
  &lt;h3&gt;Регулярное выражение&lt;/h3&gt;
  &lt;p&gt;Если быть честным, то по сути данный способ подходит для любых языков программирования, потому что в его основе лежит простое регулярное выражение. А уже где вы его будете использовать это вам решать. &lt;/p&gt;
  &lt;p&gt;Сама регулярка выглядит так:&lt;/p&gt;
  &lt;blockquote data-align=&quot;center&quot;&gt;[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}&lt;/blockquote&gt;
  &lt;p&gt;ее мы и будем использовать в обоих случаях&lt;/p&gt;
  &lt;h3&gt;Извлекаем адреса электронных почт при помощи регулярных выражений в Google Sheets&lt;/h3&gt;
  &lt;p&gt;Насколько я знаю, в Microsoft Excel такой возможности &amp;quot;из коробки&amp;quot; нет и там придется извращаться через макросы VBA. Поэтому мы и используем гугл таблицы. Но киньте в меня справочником если я ошибаюсь. &lt;/p&gt;
  &lt;p&gt;Для этого нам понадобится всего одна функция, которая и сделает всю работу за нас. &lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;REGEXEXTRACT&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Формула работает по принципу REGEXEXTRACT(текст; регулярное выражение)&lt;/p&gt;
  &lt;p&gt;Вписываем формулу в ячейку и вместо парметра &amp;quot;текст&amp;quot; ставим ссылку на нужную нам ячейку таблицы(в примере это ячейка А2). Вторым параметром пишем нашу регулярку(обязательно в кавычках)&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/2c/41/2c411499-37bd-47f5-9600-b140617e88be.jpeg&quot; width=&quot;1168&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Протягиваем по всему столбцу и получаем результат. Как видно, в тех строках, которые не содержат имейлов, формула выдает ошибку. Можно удариться в перфекционизм и добавить другую формулу IFERROR (ЕСЛИОШИБКА) которая заменит стандартный текст ошибки на какой нибудь другой, например &amp;quot;No email&amp;quot;&lt;/p&gt;
  &lt;p&gt;Конечная формула и результат выглядят так:&lt;/p&gt;
  &lt;blockquote data-align=&quot;center&quot;&gt;ЕСЛИОШИБКА(REGEXEXTRACT(A2;&amp;quot;[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}&amp;quot;);&amp;quot;No email&amp;quot;)&lt;/blockquote&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/a2/4b/a24b78db-33a1-4ab7-8e60-ef1cbcba665c.jpeg&quot; width=&quot;1173&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Готово! Наш список электронных почт готов. Остается только использовать его в правильных и непротивозаконных целях. &lt;/p&gt;
  &lt;h3&gt;Извлекаем адреса электронных почт при помощи регулярных выражений в R&lt;/h3&gt;
  &lt;p&gt;Здесь логика примерно такая же. Для извлечения текста из строки я буду использовать библиотеку &amp;quot;stringr&amp;quot;, а для работы с CSV файлами &amp;quot;vroom&amp;quot;. Устанавливаем библиотеки если еще нет и подключаем их&lt;/p&gt;
  &lt;pre&gt;install.packages(&amp;#x27;stringr&amp;#x27;) # Установка
install.packages(&amp;#x27;vroom&amp;#x27;) 
library(&amp;#x27;stringr&amp;#x27;) # Подключение
library(&amp;#x27;vroom&amp;#x27;)&lt;/pre&gt;
  &lt;p&gt;Загрузим CSV файл и преобразуем его в таблицу&lt;/p&gt;
  &lt;pre&gt;our_table &amp;lt;- vroom(&amp;quot;{PATH TO FOLDER}\\Filename.csv&amp;quot;)&lt;/pre&gt;
  &lt;p&gt;Если же у вас много файлов, у которых одинаковая структура, и их надо собрать в одну большую таблицу, то это также можно автоматизировать через R&lt;/p&gt;
  &lt;pre&gt;files &amp;lt;- dir(path = &amp;quot;{PATH TO FOLDER}&amp;quot;, pattern = &amp;quot;\\.csv&amp;quot;)
our_table &amp;lt;- vroom(files)&lt;/pre&gt;
  &lt;p&gt;Для удобства создадим переменную regex в которую запишем уже знакомое нам регулярное выражение. Обратите внимание что в R спецзнаки экранируются через двойной обратный слеш.&lt;/p&gt;
  &lt;pre&gt;regex &amp;lt;-&amp;#x27;[A-z0-9\\._%+-]+@[A-z0-9\\.-]+\\.[A-z]{2,4}&amp;#x27;&lt;/pre&gt;
  &lt;p&gt;Пишем финальную формулу, в которой добавляем в существующую таблицу новый столбец для извлеченных имейлов&lt;/p&gt;
  &lt;pre&gt;our_table$extract_emails &amp;lt;- str_extract(our_table$biography, regex)&lt;/pre&gt;
  &lt;p&gt;Экспортируем получившийся результат в CSV файл&lt;/p&gt;
  &lt;pre&gt;write.csv(our_table,&amp;quot;{PATH TO FOLDER}\\our_table.csv&amp;quot;)&lt;/pre&gt;
  &lt;p&gt;Для удобства можно отфильтровать таблицу, оставив в ней только те строки, для которых есть извлеченные имейлы. &lt;/p&gt;
  &lt;pre&gt;our_table_fin &amp;lt;- our_table %&amp;gt;%
    filter(!is.na(our_table$extract_emails))&lt;/pre&gt;
  &lt;p&gt;Конечны скрипт выглядит как-то так&lt;/p&gt;
  &lt;pre&gt;#Устанавливаем и подключаем библиотеки
install.packages(&amp;#x27;stringr&amp;#x27;) 
install.packages(&amp;#x27;vroom&amp;#x27;) 
library(&amp;#x27;stringr&amp;#x27;) 
library(&amp;#x27;vroom&amp;#x27;)
#Грузим таблицу из CSV файла
our_table &amp;lt;- vroom(&amp;quot;{PATH TO FOLDER}\\Filename.csv&amp;quot;)
#Если файлов несколько то собираем их в одну таблицу
files &amp;lt;- dir(path = &amp;quot;{PATH TO FOLDER}&amp;quot;, pattern = &amp;quot;\\.csv&amp;quot;)
our_table &amp;lt;- vroom(files)
# Пишем регулярку в переменную
regex &amp;lt;-&amp;#x27;[A-z0-9\\._%+-]+@[A-z0-9\\.-]+\\.[A-z]{2,4}&amp;#x27;
#Добавляем новый столбец в таблицу и одновременно применяем функцию str_extract 
#которая достанет нужный текст по паттерну регулярного выражения
our_table$extract_emails &amp;lt;- str_extract(our_table$biography, regex)
# Если нужно то фильтруем таблицу оставив в ней только строки с имейлами
our_table_fin &amp;lt;- our_table %&amp;gt;%
   filter(!is.na(our_table$extract_emails))
#выгружаем результат в красивую CSVшку
write.csv(our_table_fin,&amp;quot;{PATH TO FOLDER}\\our_table.csv&amp;quot;)&lt;/pre&gt;
  &lt;p&gt;Вот и все. Теперь вы умеете извлекать имейлы из текста при помощи гугл таблиц, R и регулярных выражений. &lt;/p&gt;

</content></entry><entry><id>maxarbuzov:rJGV5914V</id><link rel="alternate" type="text/html" href="https://teletype.in/@maxarbuzov/rJGV5914V?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=maxarbuzov"></link><title>Получаем значение курса валют в Google Таблицах с помощью функции IMPORTXML</title><published>2019-01-30T21:48:29.591Z</published><updated>2019-01-31T10:50:32.104Z</updated><summary type="html">&lt;img src=&quot;https://teletype.in/files/34/3414ccfb-d2e7-4aa7-b085-a5a1d26548bc.jpeg&quot;&gt;Как следует из названия функция IMPORTXML позволяет импортировать любые данные из xml файлов. Один из вариантов ее применения - импорт значений курсов валют - текущих или для конкретной даты/диапазона.</summary><content type="html">
  &lt;p&gt;Как следует из названия функция IMPORTXML позволяет импортировать любые данные из xml файлов. Один из вариантов ее применения - импорт значений курсов валют - текущих или для конкретной даты/диапазона.&lt;/p&gt;
  &lt;p&gt;Я проверил работу функции на примере API двух банков - Приватбанка и ЦБ РФ.&lt;/p&gt;
  &lt;h2&gt;Приватбанк&lt;/h2&gt;
  &lt;p&gt;&lt;strong&gt;Текущее значение курса&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;XML файл с актуальным курсом находится по ссылке: &lt;a href=&quot;https://api.privatbank.ua/p24api/pubinfo?exchange&amp;coursid=11%22;%22//exchangerates/row[1]/exchangerate/@sale&quot; target=&quot;_blank&quot;&gt;https://api.privatbank.ua/p24api/pubinfo?exchange&amp;amp;coursid=11&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Данные из него нужно парсить при помощи языка запросов XPath&lt;/p&gt;
  &lt;p&gt;Формула:&lt;/p&gt;
  &lt;pre&gt;IMPORTXML(&amp;quot;https://api.privatbank.ua/p24api/pubinfo?exchange&amp;amp;coursid=11&amp;quot;;&amp;quot;//exchangerates/row[1]/exchangerate/@sale&amp;quot;)
&lt;/pre&gt;
  &lt;p&gt;Получаем текущее значение USD. Прописав слева в ячейке А функцию TODAY получим отображение текущей даты.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/34/3414ccfb-d2e7-4aa7-b085-a5a1d26548bc.jpeg&quot; width=&quot;946&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;Курс валют для даты или диапазона дат &lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Файл с архивными значениями находится по ссылке: &lt;a href=&quot;https://api.privatbank.ua/p24api/exchange_rates?date=01.12.2014&quot; target=&quot;_blank&quot;&gt;https://api.privatbank.ua/p24api/exchange_rates?date=dd.mm.yyy&lt;/a&gt;,&lt;/p&gt;
  &lt;p&gt;где вместо &lt;strong&gt;dd.mm.yyyy&lt;/strong&gt; необходимо подставить нужное значение даты. В данном случае это 30.01.2019. Конечная формула получения значения курса валют для даты&lt;/p&gt;
  &lt;pre&gt;IMPORTXML(&amp;quot;https://api.privatbank.ua/p24api/exchange_rates?date=30.01.2019; &amp;quot;//exchangerate[@currency=&amp;#x27;USD&amp;#x27; and baseCurrency=&amp;#x27;UAH&amp;#x27;]/@saleRateNB&amp;quot;)
&lt;/pre&gt;
  &lt;p&gt;Чтобы нужная дата автоматически подставлялась в формулу указываем в диапазон дат и используем функцию СЦЕПИТЬ (CONCATENATE). Для корректной работы формулы дату необходимо перевести в текстовый формат.&lt;/p&gt;
  &lt;pre&gt;IMPORTXML(CONCATENATE(&amp;quot;https://api.privatbank.ua/p24api/exchange_rates?date=&amp;quot;;A2); &amp;quot;//exchangerate[@currency=&amp;#x27;USD&amp;#x27; and @baseCurrency=&amp;#x27;UAH&amp;#x27;]/@saleRateNB&amp;quot;)
&lt;/pre&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/33/33f756d6-5288-4bfc-9bca-b2cc151ed67a.jpeg&quot; width=&quot;1150&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;ЦБ РФ&lt;/h2&gt;
  &lt;p&gt;&lt;strong&gt;Ссылка для ежедневного значения&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://www.cbr.ru/scripts/XML_daily.asp&quot; target=&quot;_blank&quot;&gt;http://www.cbr.ru/scripts/XML_daily.asp&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Формула имеет вид&lt;/p&gt;
  &lt;pre&gt;IMPORTXML(&amp;quot;http://www.cbr.ru/scripts/XML_daily.asp&amp;quot;; &amp;quot;//ValCurs/Valute[CharCode=&amp;quot;&amp;quot;USD&amp;quot;&amp;quot;]/Value&amp;quot;)
&lt;/pre&gt;
  &lt;p&gt;&lt;strong&gt;Получаем данные для даты или диапазона&lt;/strong&gt;&lt;/p&gt;
  &lt;pre&gt;IMPORTXML(&amp;quot;http://www.cbr.ru/scripts/XML_daily.asp?date_req=30/01/2019&amp;quot;; &amp;quot;//ValCurs/Valute[CharCode=&amp;quot;&amp;quot;USD&amp;quot;&amp;quot;]/Value&amp;quot;)
&lt;/pre&gt;
  &lt;p&gt;Здесь также необходимо перевести дату в текстовый формат и обратить внимание на разделители.&lt;/p&gt;
  &lt;p&gt;На выходе получаем файл, в котором автоматически будут обновляться/добавляться данные о курсе валют.&lt;/p&gt;
  &lt;p&gt;Файл с примерами рабочих формул находится &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1z5D5SNJkiawJUXOtbefCkMVXIXc64yj4BQu6vY4q9Y8/edit?usp=sharing&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;&lt;/p&gt;

</content></entry></feed>