Google Docs Spreadsheets очень удобный онлайн инструмент для ведения бухгалтерии. Допустим, что такая бухгалтерия ведеться в долларах США, но в конечном итоге надо получить все суммы в гривнах, учитывая текущий курс валют.
Как выход - в ячейку вбить текущий курс и отталкиватся от него. Минус такого подхода состоит в том, что постоянно придется корректировать этот самый текущий курс (как минимум раз в день) .
Есть удобные онлайн сервисы, которые постоянно показывают курсы валют. Почему бы и нам их не использовать в своей таблице?
На самом деле, тут все решабельно. В качестве такого онлайн сервиса, будет использовать ся Yahoo Finance. Страница, которая предоставляет нужный тип информации (USD в UAH) будет такая: http://finance.yahoo.com/q?s=USDUAH=X.
Остается только выбрать нужное значение со страницы и использовать для себя:
=VALUE(SUBSTITUTE((SUBSTITUTE(INDEX(ImportHTML("http://finance.yahoo.com/q?s=USDUAH=X";"table";1); 1;2);"*";""));".";","))
Вставим такую формулу в нужную ячейку таблицы - и вся задача.
Теперь немного детальнее пройдемся по формуле:
VALUE - конвертирует текст в чисельное значение
SUBSTITUTE - функция, кторая заменяет одно значение в строке на другое. В нашем примере, мы сначала заменяем * на пустое значение (так как резуьтат выгребается в виде *7.92*), после чего, заменим точку на запятую - так как разделитель дробной части у меня запятая.
INDEX - получаем элемент массива (ячейку таблицы со значением курса валют)
ImportHTML - по заданому URL выгребаем контент, ищем в нем 1 таблицу.
Странное дело - почему то не работает формула..
ОтветитьУдалитьПросто сейчас в yahoo, в ячейке не одно число курса, а диапазон: 8,027 - 8,3. Они немного поменяли там верстку и логику отображения
УдалитьПотому немножко усовершенствуем формулу: добавим регулярку, которая возьмет левую границу диапазона:
=value(RegExExtract(SUBSTITUTE((SUBSTITUTE(Index(ImportHTML("http://finance.yahoo.com/q?s=USDUAH=X";"table";3); 1;2);"*";""));".";",");"[0-9,]+"))
Регулярка в гуглдоке работает так: RegExExtract(текст; регулярное_выражение)
Если хотите среднее значение то надо либо пошаманить с формулами либо поискать другой ресурс с курсом валют - где есть не диапазон, а точное значение курса ;)
Спасибо!
ОтветитьУдалитьне пойму, как вставить значение отсюда http://www.google.com/finance?q=usdrub
ОтветитьУдалитьМожно попросить объяснить - не могу сам дойти:)
Если вы хотите достать курс рубля который там сверху указан большим шрифтом, то вам нужно:
Удалить1) с помощью функции ImportXML и условия XPASS найти нужный контейнер на странице (предварительно анализируем с помощью firebug структуру HTML)
2) так как в роли разделителя десятичной части там используется точка вместо запятой то, соответственно, нужно заменить точку на запятую функцией SUBSTITUTE
3) теперь из строки вида "29,5792 RUB" ругулярным выражением достаем число
4) функция value(str) приводит текст к числовому значению с плавающей точкой
5) можно использовать ячейкув ваших формулах
Результирующая формула: =value(RegExExtract(SUBSTITUTE(ImportXML("http://www.google.com/finance?q=usdrub";"//div[@class='sfe-break-bottom-4']/span[@class='pr']/span");".";",");"[0-9,]+"))
Вот круто:) Спасибо!
УдалитьСергей, подскажите пожалуйста, как выглядит формула, если мне нужна например котировка Apple Inc.(NASDAQ:AAPL)
УдалитьПонимаю, что вместо usdrub нужно вписать AAPL, но после этого формула перестает работать.
Сам не программист, поэтому не разберусь.
Заранее благодарен.
А можете помочь с Яндекса курс вытащить (там он ЦБ РФ) http://news.yandex.ru/quotes/1.html!!! Сама не могу - не понимаю в коде ничего(((
ОтветитьУдалитьКурс Google finance:
Удалить$ =round(GoogleFinance("CURRENCY:USDRUB" ; "average");2)
€ =round(GoogleFinance("CURRENCY:EURRUB" ; "average");2)
Курс Центробанк
$ =round(importXML(CONCATENATE("http://www.cbr.ru/scripts/XML_daily.asp?date_req=";today());"/ValCurs/Valute[@id='R01235']/Value");2)
€ =round(importXML(CONCATENATE("http://www.cbr.ru/scripts/XML_daily.asp?date_req=";today());"/ValCurs/Valute[@id='R01239']/Value");2)
Коды валют центробанка http://www.cbr.ru/scripts/Root.asp?Prtid=SXML
(с) http://productforums.google.com/forum/#!topic/docs-ru/SESkZRDXWlM
Подскажите пожалуйста, нужно вытащить символ с yahoo в GDocs со знаком ^, как это сделать?
ОтветитьУдалитьс каким знаком? "^"?
УдалитьПодскажите пожалуйста, как вытащить отсюда - http://www.google.com/finance?q=NASDAQ%3AAAPL&ei=A2CuUMDGJ-ONwAPqLg
ОтветитьУдалитьданные, которые выделены черным жирным шрифтом?
Пробовал на примере с символом usdrub, ничего не выходит.
Сам не программист, разобраться не могу.
Заранее благодарен.
Евгений, я так понял имелось ввиду число выделеное самым большим и жирным шрифтом 561.70? Если да, то решение ниже:
Удалить=VALUE(SUBSTITUTE(ImportXML("http://www.google.com/finance?q=NASDAQ%3AAAPL&ei=A2CuUMDGJ-ONwAPqLg";"//div[@id='price-panel']/div[1]/span/span");".";","))
Да, именно это число. Сенкс за формулу! Но есть одно "НО" Сергей.
УдалитьЕсли вам не сложно, выделите пожалуйста жирным шрифтом, что нужно менять в этой формуле, что бы работали еще и трехзначные котировки, или двухзначные, или восьмизначные и т.д.
Например такая котировка имеет пять знаков и она работает: 561.70
А если котировка имеет три знака, то уже не работает: 9.06
http://www.google.com/finance?q=NASDAQ%3ADELL&ei=61KvUMA-yvfAA5iWAQ
Покажите плз, что нужно поменять?
p.s. Вопрос снят, разобрался.
УдалитьНо есть другой вопрос: как выглядит формула для такого индекса - http://www.google.com/finance?q=INDEXSP%3A.INX&ei=MSiyUKDrOsWrwAO3cw
Удаление запятой функцией SUBSTITUTE не помогает, т.к. удаляются все запятые.
Заранее благодарен.
Формат числа примерно такой: 1,406.90 - запятая просто разбивает число на части кратные 3 нулям, а дробная часть традиционно после точки.
УдалитьПоэтому сначала просто удалим запятые, а потом точку заменим на запятую:
=VALUE(SUBSTITUTE(SUBSTITUTE(ImportXML("http://www.google.com/finance?q=INDEXSP%3A.INX&ei=MSiyUKDrOsWrwAO3cw";"//div[@id='price-panel']/div[1]/span/span");",";"");".";","))
Можно написать и регулярное выражение, но так проще для понимания не-программистам
Если с предыдущим вопросом разобралось, то выложите свое решение: кому-то пригодится, я не всегда могу сразу отвечать на вопрос, так как мало свободного времени - потому часто могу отписать только через день-два
УдалитьСергей спасибо за ответы.
УдалитьПонял в чем ошибка. Я делал наоборот, сперва менял запятую на точку, а потом убирал запятые )))
Предыдущий вопрос снят по той причине, что котировки поши. Видать я неверно копировал данные из адресной строки.
Еще раз спасибо за помощь.
Пожалуйста :)
УдалитьСлучайно не в курсе, как вытянуть код всего портфолио для вставки графика на сайт.
УдалитьНапример вот этого - http://www.google.com/finance/portfolio?action=view&pid=3&ei=bIu0UIDrBqmYwQOoiAE
Полистал ваш блог, ответ не нашел.
у меня в гугл аккаунте нет портфолио :) потому посмотреть немогу. Если на странице есть данные то их все можно вытянуть в отдельные ячейки вашей таблицы как в примерах выше, а уже по ним построить график. Но нельзя злоупотреблять формулами, так как придеться для каждой ячейки фактически слать запрос на сервер.
УдалитьImportXML("http://...) это уже запрос, на каждый запрос + парсинг + выполнение формулы будут задержки, потому желательно запросить всю страницу за один раз. Например весь нужный кусок страницы запихнуть в скрытую ячейку и парсить уже всем из нее данные.
Но, для сложных задач правильнее всего использовать скрипты, которые поддурживают гугл таблицы, стартовая дока https://developers.google.com/apps-script/your_first_script
Оно похоже на VisualBasic for Microsoft Office, принцип тот же, только язык другой в основе: JavaScript
Но придется читать доки и учится писать на нем под таблицы :)
Документация есть
А не подскажете, с этого сайта http://www.bsb.by/ вообще можно курсы спарсить в гугл док? А то мне именно обменные курсы надо, но что-то самому не получилось.
ОтветитьУдалитьБуду очень благодарен за помощь или совет.
Спасибо!
Никита
Конечно можно, если верстка сайта не меняется. Нужно найти контейнер id=block-currency и внутри него найти и распарсить таблицу с курсами
УдалитьСергей, не поможете мне создать формулу, чтоб в гугл док показывался ежедневный курс продажи фунта и доллара по приватбанку с этого сайта http://kurs.com.ua/privatbank. До двух ночи промучалась- ничего не вышло(((
ОтветитьУдалитьНе получилось найти решение следующей задачи.
ОтветитьУдалитьИз web страницы с помощью importXML вставляем нужное значение, например, тот же курс валют, в ячейку. Это значение (курс) на исходном сайте постоянно изменяется. Как организовать соответствующее по заданному периоду обновление этого значения в ячейке таблицы Google?
Если изменяется сам курс то все правильно, формула каждый раз при открытии таблицы будет запрашивать текущий курс (или обновить страницу). В этом и есть смысл использовать динамическую формулу в гуглдок, иначе проще скопировать курс с нужного сайта в ячейку
УдалитьЭто понятно. Интересует, обновление курса не при открытии таблицы, а по расписанию, через заданные промежутки времени.
Удалитьтолько вот с формулой никак не получается((...
ОтветитьУдалитьПриветсвую! Можете кратко пояснить IMPORTHTML(url, query, index) что означают query и индекс. Как их определить/выбрать? В гугл справке написано совсем непонятно.
ОтветитьУдалитьhttps://support.google.com/drive/answer/3093339?hl=en
Удалитьпример http://www.labnol.org/internet/import-html-in-google-docs/28125
Удалитьquery = table или list
Удалитьищем по указаному пути на странице таблицу либо список
index - какая по счету таблица или список в документе будет взята
таблица находится по тегам table, список по тегам ul, ol
Добрый день!
ОтветитьУдалитьСкажите пожалуйста, как можно сделать курс валю через этот сайт:
http://finance.i.ua/
Необходимо из левой нижней колонки взять курс доллара с Банка ПриватБанк.
Так же взять курс НБУ.
спасибо за ответ
Добрый день, вечером посмотрю и опубликую решение
УдалитьТочно такая же просьба.
ОтветитьУдалитьСпасибо за понимание)
Здравствуйте!
ОтветитьУдалитьОчень прошу помощи в создании 3 формул для Google Таблицы, так как сам уже несколько часов не могу их сделать. Суть формулы - чтобы каждый день значения курсов валют вносились в 3 отдельные ячейки таблицы.
Вот скриншот источника, откуда нужно брать курсы. Весьма благодарен!
Здравствуйте! Невижу скриншота в аттачментах. Выложите его на каком-то паблик ресурсе и приатачте ссылку. В свободное время посмотрю
УдалитьПодскажите, пожалуйста, можно ли вытащить данные если на странице по ссылке-скрипту открывается всплывающее окно, в котором и находится таблица.
ОтветитьУдалитьСтраница: https://www.skrill.com/ru/dljachastnykhlic/tarify/
Ссылка-скрипт на словах ( javascript:;" id="shfx">оптового курса обмена валют<)
Конкретно нужно значение EUR/USD из этой таблицы.
Спасибо
Все данные лежат там в JSON файле https://www.skrill.com/fileadmin/templates/main/res/js/json/fxrates.js
УдалитьРаспарсить элементарно, ключ - Валюта, а значение - Курс валюты
спасибо, за ответ, но я не совсем понимаю, как в гуглдокс распарсить по : ключ - Валюта, а значение - Курс валюты.
УдалитьБуду благодарен за пояснения.
Нужно скрипт спец. подключить, инструкция тут https://docs.google.com/spreadsheets/d/1NSdHqIueq6Ie1zU0atK4hHvqqqoxu7lW7eTMTRx6--4/edit#gid=0
УдалитьДобрый день, Сергей! Помогите пожалуйста с формулой для вставки значения в google docs курса валют с сайта bin.ua. Интересует Межбанковский рынок курс валют евро и доллар. Спасибо!
ОтветитьУдалитьСкажите, пожалуйста. А если нужен курс рубля на определенную дату, то как будет выглядит формула. Спасибо.
ОтветитьУдалитьДобрый день, Сергей!
ОтветитьУдалитьПомогите пожалуйста с формулой для вставки значения в google таблицу курса валют евро и рубля.
Спасибо!
Все упростилось: =GOOGLEFINANCE("EURRUB")
Удалитьможно ли сделать значение поиска переменным, чтобы таблица курсов разных стран подтягивалась?
ОтветитьУдалитьЯ пытался использовать функцию =сцепить("http://www.google.com/finance?q=usd;С2;";"//div[@class='sfe-break-bottom-4']/span[@class='pr']/span")
где С2 mxd
в С3 rub и так далее, но почему-то гугл выдает ошибку.
пробовал и на стороне сцеплять все и потом подсовывать ячейку со строкой, но всё равно не принимает.
Есть ли у кого-то идеи как сделать правильно?