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

Есть миллионы людей, которые бесхитростно работают в 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

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …