Бредовая идея

Есть миллионы людей, которые бесхитростно работают в Excel с самыми обычными электронными таблицами. Есть очень редкие гики, которые используют максимум возможностей встроенного VBA-языка, чтобы, к примеру, обойти ограничение на запуск менеджера задач, реализовав свой собственный. Я отношусь к первому типу :). Я сильно не люблю составлять отчеты. Придумать более унылое занятие невозможно: взять данные оттуда, вставить в таблицу, взять данные из другого места и опять вставить в таблицу. После третьего такого отчета я решил это занятие автоматизировать. Задача казалась вполне земной, если бы не одно но — иметь дело со встроенным VBA совершенно не хотелось. К тому же нужно было обрабатывать сложные форматы файлов, а писать с нуля парсер нисколько не привлекало. С документом надо было работать постоянно, поэтому вариант написать внешний скрипт на Python, который на основе xls-шаблона создавал бы отчет, вставляя нужные данные, не годился (хотя изначально я хотел делать именно так). «Вот если бы в Excel был встроен Python для скриптинга, то все было бы в десять раз проще», — подумал я и набрал в Google: «excel with python». Оказалось, что подобной ерундой был озадачен не только я :).

 

Excel + Python

Один из первых найденных проектов —PyXLL позволял быстро писать на питоне функции, которые далее можно было использовать наравне со стандартными функциями Excel’я (вроде СУММА()). Я даже попробовал его в действии. Выглядит это так: ты пишешь Python-скрипт в соответствии с некоторыми правилами, реализуя необходимые действия с получаемыми данными, после чего через специальный аддон для Excel’я импортируешь написанные функции. Не так плохо, но хотелось прямо в коде Python обращаться к нужным ячейкам электронной таблицы. И это позволял другой найденный аддон DataNitro. После его установки в Excel’е появляется новая вкладка, откуда вызывается редактор. Интеграция выполнена очень удобно, поэтому можно, не сильно заморачиваясь, написать что-то вроде:

Cell("A1").value = "Hello, World!"

Далее запускаем сценарий с помощью кнопки на панели тулбара и получаем нужное значение в ячейке A1! Недолго думая, я стал наращивать функционал, который мне был нужен. Пробую импортировать библиотеки для работы с нужными форматами и прочитать данные — все работает. Запрашиваю через API информацию из нескольких онлайн-сервисов — все отлично агрегируется. Пишу простенькую приблуду для рассылки отчетов — все отлично отправляется. В итоге за тридцать минут удается сделать скрипт, который будет экономить два часа — те, что превращались для меня в пытку :). Сперва я даже начал выполнять в Python все расчеты, лишь позже вспомнив, что с этим справится сам Excel. Впрочем, если нужно посчитать что-то серьезное, то ничего не стоит подгрузить математический модуль NumPy и делать любые научные вычисления.

Вкладка аддона, с помощью которой реализуется интеграция DataNitro и Excel
Вкладка аддона, с помощью которой реализуется интеграция DataNitro и Excel
 

Выжать максимум

Скриптинг на Python — всегда гарантия хорошей расширяемости приложения. Взять хотя бы редактор Sublime Text: плагины для него есть уже на любой случай жизни. Впрочем, можно не ходить далеко за примером. Один из создателей DataNitro в качестве иллюстрации возможностей своей разработки написал на Excel’е Twitter-клиент (подробнее можно прочитать здесь: bit.ly/Res2mZ). Причем минимальными усилиями благодаря питоновской обертке для Twitter API — tweepy. Конечно, это всего лишь Proof-of-Concept, но зато хорошая иллюстрация того, что интеграция с Python с его огромным количеством готовых модулей на любой случай жизни может быть очень полезной. Кстати, сделать такую фишку не так уж и сложно, о чем пишется в официальной документации Python. А освоить основы языка можно за полчаса. К слову, интерактивная школа по программированию Codeacademy как раз выпустила неплохой курс (http://www.codecademy.com/tracks/python).

 

Оставить мнение

Check Also

LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Не секрет, что если ты собрался посетить такие страны как США или Великобританию то, прежд…