Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Импорт исторических биржевых данных - Страница 5 - Мир MS Excel

Старая форма входа
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Импорт исторических биржевых данных (Макросы/Sub)
Импорт исторических биржевых данных
Vostok Дата: Среда, 03.12.2014, 13:55 | Сообщение № 81
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
vba некорректно запятую обрабатывает

Ок, отчасти проблему решил. Спасибо. Получается это не VBA глючит а сам Excel при виде запятой вспоминает о своём американском происхождении :)
[vba]
Код
Select Case TD.ClassName
Case "bold left noWrap elp"
Column = Column + 1
rngStart.Cells(Row, Column) = Split(TD.innerText, " ")(1)
Case Else
Column = Column + 1
rngStart.Cells(Row, Column) = Replace(TD.innerText, ",", ".")
End Select
[/vba]
Но всё-равно не пойму. Цифры то перевирает. Ведь Свойство .innerText берёт То, что есть в коде страницы. А там и есть То, что есть на сайте. А вот при импорте цифра выдаёт новое значение. Конечно, может и не существенно, но в чем природа эффекта, вот вопрос.


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Среда, 03.12.2014, 14:39
 
Ответить
Сообщение
vba некорректно запятую обрабатывает

Ок, отчасти проблему решил. Спасибо. Получается это не VBA глючит а сам Excel при виде запятой вспоминает о своём американском происхождении :)
[vba]
Код
Select Case TD.ClassName
Case "bold left noWrap elp"
Column = Column + 1
rngStart.Cells(Row, Column) = Split(TD.innerText, " ")(1)
Case Else
Column = Column + 1
rngStart.Cells(Row, Column) = Replace(TD.innerText, ",", ".")
End Select
[/vba]
Но всё-равно не пойму. Цифры то перевирает. Ведь Свойство .innerText берёт То, что есть в коде страницы. А там и есть То, что есть на сайте. А вот при импорте цифра выдаёт новое значение. Конечно, может и не существенно, но в чем природа эффекта, вот вопрос.

Автор - Vostok
Дата добавления - 03.12.2014 в 13:55
Vostok Дата: Среда, 03.12.2014, 15:16 | Сообщение № 82
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Возник вопрос. С помощью запросчика получили код страницы. Далее совершаем обход по нужным таблицам, меняя (tableId) нужных таблиц:


Интересно, а можно после занесения объекта в переменную, подсчитать количество TR и TD в выбранном объекте ? Попытался, (в коде закоментированно), не получилось.


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Среда, 03.12.2014, 15:18
 
Ответить
СообщениеВозник вопрос. С помощью запросчика получили код страницы. Далее совершаем обход по нужным таблицам, меняя (tableId) нужных таблиц:


Интересно, а можно после занесения объекта в переменную, подсчитать количество TR и TD в выбранном объекте ? Попытался, (в коде закоментированно), не получилось.

Автор - Vostok
Дата добавления - 03.12.2014 в 15:16
doober Дата: Среда, 03.12.2014, 17:37 | Сообщение № 83
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Интересно, а можно после занесения объекта в переменную, подсчитать количество TR и TD в

Можно[vba]
Код

         '***************USE Dom*******************
         Set objTable = objHTML.getElementById(tableId)
         Set MMM = objTable.GetElementsByTagName("tr")
         Debug.Print MMM.Length
           Debug.Print MMM(0).Cells.Length
         Row = 0
         For Each TR In MMM
             Debug.Print TR.Cells.Length
             Row = Row + 1
             Column = 0
[/vba]


 
Ответить
Сообщение
Интересно, а можно после занесения объекта в переменную, подсчитать количество TR и TD в

Можно[vba]
Код

         '***************USE Dom*******************
         Set objTable = objHTML.getElementById(tableId)
         Set MMM = objTable.GetElementsByTagName("tr")
         Debug.Print MMM.Length
           Debug.Print MMM(0).Cells.Length
         Row = 0
         For Each TR In MMM
             Debug.Print TR.Cells.Length
             Row = Row + 1
             Column = 0
[/vba]

Автор - doober
Дата добавления - 03.12.2014 в 17:37
buchlotnik Дата: Среда, 03.12.2014, 19:04 | Сообщение № 84
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
Получается это не VBA глючит а сам Excel при виде запятой вспоминает о своём американском происхождении
ага, в своё время мне это много крови попортило. Лечения кроме как замена символа не нашёл. Кстати, спасибо за [vba]
Код
Replace(строка, ",", ".")
[/vba]чё-то я с циклом погорячился B)
 
Ответить
Сообщение
Цитата
Получается это не VBA глючит а сам Excel при виде запятой вспоминает о своём американском происхождении
ага, в своё время мне это много крови попортило. Лечения кроме как замена символа не нашёл. Кстати, спасибо за [vba]
Код
Replace(строка, ",", ".")
[/vba]чё-то я с циклом погорячился B)

Автор - buchlotnik
Дата добавления - 03.12.2014 в 19:04
Vostok Дата: Четверг, 04.12.2014, 10:59 | Сообщение № 85
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
га, в своё время мне это много крови попортило.

Могу себе представить. Я пялился в Лист с тем что туда загрузилось дня два и то чуть мозги не закипели:-). Вот, тоже интересная страница для загрузки:

Тут и запятые и точки. Хорошо, что не с этой страницы начал - а то бы вообще "башню" снесло. Двух запятых я бы не пережил :-)


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Четверг, 04.12.2014, 10:59
 
Ответить
Сообщение
га, в своё время мне это много крови попортило.

Могу себе представить. Я пялился в Лист с тем что туда загрузилось дня два и то чуть мозги не закипели:-). Вот, тоже интересная страница для загрузки:

Тут и запятые и точки. Хорошо, что не с этой страницы начал - а то бы вообще "башню" снесло. Двух запятых я бы не пережил :-)

Автор - Vostok
Дата добавления - 04.12.2014 в 10:59
Vostok Дата: Четверг, 04.12.2014, 11:12 | Сообщение № 86
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Итак, для систематизации в теме, выкладываю итоговой файл того, что получилось для импорта данных по Государственным Облигациям стран Мира с сайта investing.com. Безусловно цифры и таблицы нужны для построения Кривых Доходностей и макрос будет тому и интересен, кто использует эти Кривые для своих рыночных прогнозов.

Макрос, а точнее группа макросов, загружает таблицы Доходностей по странам, по разным листам. Присваивает глобальные имена диапазонам каждой таблицы (для последующего быстрого обращения к ним). В коде есть выбор метода размещения таблиц на листе - вертикальный или горизонтальный. Лист "Коды" можно сделать невидимым, построить графики, создать пользовательскую форму, счётчики времени в коде - закоментировать, добавить циклы и т.д. Вообщем кому как понравится. Это всего лишь - шаблон для творчества. Листы, кроме "Америки" пришлось удалить, т.к файл не помещался для загрузки. Они потом при запуске будут созданы.
К сообщению приложен файл: AllGovernment_.xlsm (63.5 Kb)


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Четверг, 04.12.2014, 12:12
 
Ответить
СообщениеИтак, для систематизации в теме, выкладываю итоговой файл того, что получилось для импорта данных по Государственным Облигациям стран Мира с сайта investing.com. Безусловно цифры и таблицы нужны для построения Кривых Доходностей и макрос будет тому и интересен, кто использует эти Кривые для своих рыночных прогнозов.

Макрос, а точнее группа макросов, загружает таблицы Доходностей по странам, по разным листам. Присваивает глобальные имена диапазонам каждой таблицы (для последующего быстрого обращения к ним). В коде есть выбор метода размещения таблиц на листе - вертикальный или горизонтальный. Лист "Коды" можно сделать невидимым, построить графики, создать пользовательскую форму, счётчики времени в коде - закоментировать, добавить циклы и т.д. Вообщем кому как понравится. Это всего лишь - шаблон для творчества. Листы, кроме "Америки" пришлось удалить, т.к файл не помещался для загрузки. Они потом при запуске будут созданы.

Автор - Vostok
Дата добавления - 04.12.2014 в 11:12
Vostok Дата: Понедельник, 08.12.2014, 16:08 | Сообщение № 87
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Однако закралась ошибка на этапе присвоения имени диапазону таблицы . Сразу и не заметил. Имена диапазонов не выносят пробелов и тире. Исправил. Немного видоизменил код. Этот вариант работает значительно быстрее.
К сообщению приложен файл: AllGovernment2.xlsm (69.2 Kb)


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Вторник, 09.12.2014, 10:47
 
Ответить
СообщениеОднако закралась ошибка на этапе присвоения имени диапазону таблицы . Сразу и не заметил. Имена диапазонов не выносят пробелов и тире. Исправил. Немного видоизменил код. Этот вариант работает значительно быстрее.

Автор - Vostok
Дата добавления - 08.12.2014 в 16:08
Vostok Дата: Вторник, 09.12.2014, 10:54 | Сообщение № 88
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
К сообщению приложен файл: AllGovernment2.xlsm(69Kb)

Одного так и не понял сам. На загрузке Доходность "Европы" макрос в самом начале сильно притормаживает, глубоко задумываясь, а потом как взрывается. При втором запуске идёт быстрее. Вопрос. %)


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
 
Ответить
Сообщение
К сообщению приложен файл: AllGovernment2.xlsm(69Kb)

Одного так и не понял сам. На загрузке Доходность "Европы" макрос в самом начале сильно притормаживает, глубоко задумываясь, а потом как взрывается. При втором запуске идёт быстрее. Вопрос. %)

Автор - Vostok
Дата добавления - 09.12.2014 в 10:54
Vostok Дата: Вторник, 09.12.2014, 14:23 | Сообщение № 89
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Парни, снова Help !!!
Решил замахнуться на импорт со страницы, где данные идут по Tаймфреймам и представлены в графическом виде.


Соорудил запросчик:

А вместо вожделенных цифр получаю какую-то кашу из непотребного HTML. С какого бока к этой странице подобраться можно? В каком-то месте явно знаний не хватает.
К сообщению приложен файл: 3456293.xlsm (12.7 Kb)


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Вторник, 09.12.2014, 14:30
 
Ответить
СообщениеПарни, снова Help !!!
Решил замахнуться на импорт со страницы, где данные идут по Tаймфреймам и представлены в графическом виде.


Соорудил запросчик:

А вместо вожделенных цифр получаю какую-то кашу из непотребного HTML. С какого бока к этой странице подобраться можно? В каком-то месте явно знаний не хватает.

Автор - Vostok
Дата добавления - 09.12.2014 в 14:23
doober Дата: Вторник, 09.12.2014, 15:59 | Сообщение № 90
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Вот и наступил мой день по парсингу JSON :'(
Не хватает этой строки
[vba]
Код
.setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500"
[/vba]
Ответ приходит в формате JSON
У вас 2 варианта.
1.Парсить самому.
2.Немножко поделиться акциями,получить готовый парсинг hands


 
Ответить
СообщениеВот и наступил мой день по парсингу JSON :'(
Не хватает этой строки
[vba]
Код
.setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500"
[/vba]
Ответ приходит в формате JSON
У вас 2 варианта.
1.Парсить самому.
2.Немножко поделиться акциями,получить готовый парсинг hands

Автор - doober
Дата добавления - 09.12.2014 в 15:59
Vostok Дата: Среда, 10.12.2014, 06:15 | Сообщение № 91
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Не хватает этой строки
.setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500"

А для другого инструмента эта строка будет другая, и что же делать, для каждого инструмента свой запросчик писать?
У вас 2 варианта.
1.Парсить самому.
2.Немножко поделиться акциями,получить готовый парсинг

Реально не понял о каких акциях речь? %) Но уже чувствую, что разбираться придётся самому :)


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Среда, 10.12.2014, 10:31
 
Ответить
Сообщение
Не хватает этой строки
.setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500"

А для другого инструмента эта строка будет другая, и что же делать, для каждого инструмента свой запросчик писать?
У вас 2 варианта.
1.Парсить самому.
2.Немножко поделиться акциями,получить готовый парсинг

Реально не понял о каких акциях речь? %) Но уже чувствую, что разбираться придётся самому :)

Автор - Vostok
Дата добавления - 10.12.2014 в 06:15
Vostok Дата: Среда, 10.12.2014, 10:58 | Сообщение № 92
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Для систематизации в теме подведём небольшие итоги. Как пример - загрузка исторических данных основных Фондовых Индексов разных стран с сайта Investing.com методом POST:

Желающим добавить свои Индексы, с того же, естественно, сайта нужно просто вписать их в конец списка на листе "Коды". Макрос подгрузит этот Инструмент и выложит его на лист вместе со всеми ранее имевшимися:

Добавляя Инструмент (Индекс), не забываем минимизировать в его названии количество амперсантов, тире, пробелов, косых чёрточек или потом дописываем код на предмет удаления или замены этих значков. Лично я постоянно забываю, а потом при именовании диапазона вылетают ошибки. Для получения листа с индексами запустите процедуру Sub Download_Index().
К сообщению приложен файл: Investing_Index.xlsm (38.0 Kb)


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Четверг, 11.12.2014, 08:14
 
Ответить
СообщениеДля систематизации в теме подведём небольшие итоги. Как пример - загрузка исторических данных основных Фондовых Индексов разных стран с сайта Investing.com методом POST:

Желающим добавить свои Индексы, с того же, естественно, сайта нужно просто вписать их в конец списка на листе "Коды". Макрос подгрузит этот Инструмент и выложит его на лист вместе со всеми ранее имевшимися:

Добавляя Инструмент (Индекс), не забываем минимизировать в его названии количество амперсантов, тире, пробелов, косых чёрточек или потом дописываем код на предмет удаления или замены этих значков. Лично я постоянно забываю, а потом при именовании диапазона вылетают ошибки. Для получения листа с индексами запустите процедуру Sub Download_Index().

Автор - Vostok
Дата добавления - 10.12.2014 в 10:58
Vostok Дата: Четверг, 11.12.2014, 10:03 | Сообщение № 93
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Ответ приходит в формате JSON

Разве ЭТО формат JSON?

Скорее Это формат JSON

Оно и должно возвращаться в ответ на запрос функции, чего собственно и не происходит. Или я не в теме?


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Четверг, 11.12.2014, 10:15
 
Ответить
Сообщение
Ответ приходит в формате JSON

Разве ЭТО формат JSON?

Скорее Это формат JSON

Оно и должно возвращаться в ответ на запрос функции, чего собственно и не происходит. Или я не в теме?

Автор - Vostok
Дата добавления - 11.12.2014 в 10:03
doober Дата: Четверг, 11.12.2014, 14:45 | Сообщение № 94
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Не знаю,что вы получаете,у меня такой ответ сервера

И работает ТАК




Сообщение отредактировал doober - Четверг, 11.12.2014, 15:01
 
Ответить
СообщениеНе знаю,что вы получаете,у меня такой ответ сервера

И работает ТАК

Автор - doober
Дата добавления - 11.12.2014 в 14:45
Vostok Дата: Пятница, 12.12.2014, 14:52 | Сообщение № 95
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Полтергейтс какой-то:

Как тебе функция возвращает строку которую я выдели в Locals твоего ролика не ПОНИМАЮ. %) Полнейший ТУПИК.
У меня рисует одно и то же:

Функцию по буквам перепроверил. Это не в библиотеке MSXML2.XMLHTTP заноза случайно?


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Пятница, 12.12.2014, 15:07
 
Ответить
СообщениеПолтергейтс какой-то:

Как тебе функция возвращает строку которую я выдели в Locals твоего ролика не ПОНИМАЮ. %) Полнейший ТУПИК.
У меня рисует одно и то же:

Функцию по буквам перепроверил. Это не в библиотеке MSXML2.XMLHTTP заноза случайно?

Автор - Vostok
Дата добавления - 12.12.2014 в 14:52
Vostok Дата: Пятница, 12.12.2014, 15:32 | Сообщение № 96
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
И ещё прикол. Решил просто "тупо" взять строку:

и вставить её в редактор:

так она не вставляется ни при каких усилиях:

Чертовщина какая-то %) Уже интересно, кто-нибудь знает ответы на эти тупиковые вопросы?


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Пятница, 12.12.2014, 15:33
 
Ответить
СообщениеИ ещё прикол. Решил просто "тупо" взять строку:

и вставить её в редактор:

так она не вставляется ни при каких усилиях:

Чертовщина какая-то %) Уже интересно, кто-нибудь знает ответы на эти тупиковые вопросы?

Автор - Vostok
Дата добавления - 12.12.2014 в 15:32
doober Дата: Пятница, 12.12.2014, 15:57 | Сообщение № 97
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Чертовщина какая-то Уже интересно, кто-нибудь знает ответы на эти тупиковые вопросы?

Брать комп и вместе к батюшке на очистку.
JSON2
По вопросу вставки,с кавычками разбирайтесь,а руками задваивать их нудно ,разве что в блокноте поиск-замена




Сообщение отредактировал doober - Пятница, 12.12.2014, 16:01
 
Ответить
Сообщение
Чертовщина какая-то Уже интересно, кто-нибудь знает ответы на эти тупиковые вопросы?

Брать комп и вместе к батюшке на очистку.
JSON2
По вопросу вставки,с кавычками разбирайтесь,а руками задваивать их нудно ,разве что в блокноте поиск-замена

Автор - doober
Дата добавления - 12.12.2014 в 15:57
Vostok Дата: Суббота, 13.12.2014, 09:12 | Сообщение № 98
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
По вопросу вставки,с кавычками разбирайтесь,а руками задваивать их нудно ,разве что в блокноте поиск-замена

Ну здесь я ступил. Строка то длинная и так обычно не пишется, во-первых, а во-вторых действительно, можно и задваивать, а можно и заменой двойной кавычки &Char(34)&

Но это всего лишь промежуточный момент по вопросу о импорте JSON.


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
 
Ответить
Сообщение
По вопросу вставки,с кавычками разбирайтесь,а руками задваивать их нудно ,разве что в блокноте поиск-замена

Ну здесь я ступил. Строка то длинная и так обычно не пишется, во-первых, а во-вторых действительно, можно и задваивать, а можно и заменой двойной кавычки &Char(34)&

Но это всего лишь промежуточный момент по вопросу о импорте JSON.

Автор - Vostok
Дата добавления - 13.12.2014 в 09:12
Vostok Дата: Суббота, 13.12.2014, 09:39 | Сообщение № 99
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Брать комп и вместе к батюшке на очистку.
JSON2

Если уж местные профессионалы молчат, где уж батюшке то ;)
Новый ролик настроения не прибавил, методом POST - XMLHTTP.responseText отрабатывает корректно. А вот GET да ещё JSON не принимает. Где-то тут хитрость какая-то засела....


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"

Сообщение отредактировал Vostok - Суббота, 13.12.2014, 09:42
 
Ответить
Сообщение
Брать комп и вместе к батюшке на очистку.
JSON2

Если уж местные профессионалы молчат, где уж батюшке то ;)
Новый ролик настроения не прибавил, методом POST - XMLHTTP.responseText отрабатывает корректно. А вот GET да ещё JSON не принимает. Где-то тут хитрость какая-то засела....

Автор - Vostok
Дата добавления - 13.12.2014 в 09:39
Vostok Дата: Суббота, 13.12.2014, 12:54 | Сообщение № 100
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 211
Репутация: 1 ±
Замечаний: 40% ±

Excel 2010
Вот и наступил мой день по парсингу JSON :'(

Ну а модуль класса JsonBag - это самый большой секрет !!! Я правильно понял? :)


"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
 
Ответить
Сообщение
Вот и наступил мой день по парсингу JSON :'(

Ну а модуль класса JsonBag - это самый большой секрет !!! Я правильно понял? :)

Автор - Vostok
Дата добавления - 13.12.2014 в 12:54
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Импорт исторических биржевых данных (Макросы/Sub)
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!