Excel это язык программирования или нет
Поводом для заметки послужила статья на Хабре, в которой автор описывал, как он решал на Python задачу сбора и анализа метаданных из файлов Excel .
Эта заметка более подробно раскрывает всем известный тезис: Под конкретную задачу надо выбирать наиболее подходящий инструмент применимо к офисной автоматизации.
VBA и Python
VBA (Visual Basic for Applications) , де-факто, самый популярный язык для автоматизации Microsoft Office. Доступен из коробки, помимо Excel, работает в PowerPoint, Outlook, Access, Project и других приложениях.
Если задать вопрос: «Какой язык программирования выбрать первым», то где-то в 90% всех случаев будет предложен Python . На практике здесь может быть и любой другой язык, но, исходя из популярности языка и своего опыта, буду сравнивать с ним.
В общем виде можно описать ситуацию через подобный график:
Детального сравнения не будет, рассмотрим основные killer-фичи, в ситуации, когда junior-программист/офисный сотрудник хочет автоматизировать что-либо, связанное с MS Office, и у него есть возможность выбора между языками.
Если в силу разных причин возможности выбора нет, то и сравнивать нечего.
В пользу VBA
- Отличная работа с объектной моделью Excel и других приложений MS Office . Написание кода на VBA для большинства внутренних операций тривиально. У Python, в сравнении с VBA, поддержка объектной модели Office очень слабая.
- Поддержка разных форматов MS Office. Самая большая проблема для внешних языков - это работа с разными форматами файлов MS Office. Например, xls, xlsx, xlsm файлы могут требовать разных библиотек, так как каждая хорошо работает только со своим форматом файла. Для VBA - это все “файл Excel”, работа с которыми в целом одинаково хороша.
- Работа с MS Exchange. Если необходимо обеспечить работу с корпоративной почтой/календарем на Exchange, то далеко не каждом языке есть нормальная библиотека для работы протоколом Exchange. В VBA это решается относительно просто через использование в макросе объектной модели MS Outlook.
- Легкая установка и дистрибуция. К уже установленному офису не надо ничего устанавливать. Чтобы коллега мог воспользоваться программой, достаточно передать ему файл с макросом. Легко сделать надстройку, которая позволит “установить” модель макроса в фон офиса.
- Интерактивность внутри приложений MS Office. Внутри офисных программ можно как просто поставить кнопки запуска макросов, так и (чуть сложнее) сделать целый отдельный UI. Сюда же относится написание своих формул в Excel и то, что макросы могут воздействовать на объекты внутри документов Office в реальном времени.
- Запись макросов. Удобный инструмент, который позволяет записать действия человека в готовый код, для последующего редактирования использования.
В пользу Python (и других внешних языков программирования)
- Приятный синтаксис и синтаксический сахар. Если коротко, то VBA не отличается выразительностью и удобством. Это вопрос личного вкуса, но для меня Python намного удобнее.
- Богатая экосистема библиотек. Огромный выбор готовых библиотек для работы с внешним миром. Пытаться сделать на VBA программу, взаимодействующую с каким-нибудь внешним API, та еще боль. Занимательно, что как раз для работы с файлами Office библиотеки того же Python - откровенно “на троечку”.
- Хорошие средства разработки. Можно выбрать из огромного выбор программ, которые облегчают процесс разработки. Стандартный редактор VBA из Office предлагает очень бедный функционал и, в сравнении с альтернативами из мира Python, откровенно неудобен. Писать код VBA в внешнем редакторе, а потом копировать внутрь офиса для отладки - тоже неудобно.
- Скорость работы. Не проверял скорость однопоточной работы, но, предположу, что в случае однопоточной работы преимущество будет за Python. В любом случае, достаточно тривиально организуется многопоточная обработка данных/файлов, что позволяет говорить в большей достижимой скорости.
Кейсы
Далее приведены конкретные задачи, которые я сам решал или автоматизировал, и когда мне надо было выбрать стек: VBA или Python. Для каждой задачи указан выбранный стек и даны пояснения почему:
- Мой выбор: VBA . Причины: простота работы с разными форматами файлов Excel и отсутствие внешних взаимодействий.
Задача: Сервис, который должен был позволить пользователю с мобильного устройства конвертировать файлы PowerPoint в PDF для просмотра
- Сервис был реализован как почтовый бот, на адрес которого пользователь может переслать файлы Office, а в ответ пользователю по почте приходит ответ с файлами PDF.
- Мой выбор: Логика VBA + Python для мониторинга
- Во-первых, внутренние функции гарантированно сохраняли PDF, аутентичный файлу PowerPoint (внешние библиотеки плохо справляются с рендером PowerPoint).
- Во-вторых, реализация почтового бота, как макроса в MS Outlook решала проблемы работы с корпоративной Exchange почтой. Так, в Python нет нормальной библиотеки для работы с MS Exchange.
- Python использовался для организации мониторинга работы сервиса и нотификации о возможных проблемах
- Мой выбор: VBA . Задача решалась через конвертацию двух файлов в PDF и их объединением с Riffle Shuffle. Так как важно качество конвертации в PDF, то использовались встроенные функции офиса для экспорта в PDF.
Задача: Дана база данных по предприятиям отрасли в виде карточек-отдельных файлов html, которые надо отфильтровать и объединить в 1 файл Excel для расчета ряда показателей.
- Мой выбор: Python .
- Чтобы вытаскивать из html карточек данные пригодилась библиотека для парсинга html BeautifulSoup.
- Excel-файл создает программа, поэтому мы сами можем решать, какую аналитику рассчитывать уже в нем, а какую еще на стадии подготовки данных в Python.
Задача: Перевести весь текст в презентации PowerPoint на другой язык машинным переводчиком
- Мой выбор: VBA . Важно было аккуратно работать с текстом во внутренних объектах файла PowerPoint. Для перевода использовался API от Яндекса, так как он бесплатен для небольших объемов и прост в подклюении. Например, API переводчика Bing я так и не смог заставить работать в VBA, так как там для работы нужен OAuth со своими заморочками. Если бы пришлось работать с Bing, то, наверное, я бы делал сервис-посредник на Python.
Задача: По заданным биржевым тикерам брать данные из API с финансовыми показателями (API выдает сформированный по запросу CSV файл) и считать на их основе ряд бенчмарков для анализа
- Мой выбор: Python . Хотя API - простой (не требует какой-либо подписи запросов или авторизации) и выдает данные в CSV, выбран Python, так как нет причин выбирать VBA, а на Python писать удобнее.
Задача: Ведение базы поручений, рассылка уведомлений исполнителям, генерация отчета для печати
Здесь я выбирал очень долго, так как есть много альтернатив:
- Сторонняя готовая система поручений
- База данных с каким-то обработчиком
- Access
- Excel
Мой выбор: VBA
- Во-первых, Excel сам по себе является готовым UI для работы
- Во-вторых, VBA решает задачу работы с корпоративным Exchange через подключение MS Outlook
- В-третьих, это решение делалось с прицелом на коллег, которым Excel был более понятен, чем что-либо совсем новое
Заключение
Надеюсь, для кого-то заметка будет полезна и позволит сэкономить время на выборе стека для решения своих задач.
Многие пользуются Excel для анализа данных, но Python лучше подойдет для решения аналитических задач: в нем можно работать с неограниченным количеством данных и написать пару строк кода для сложной операции. Перевели статью Stop Using Excel for Data Analytics: Upgrade to Python Тайлера Фолкмана, руководителя направления ИИ в Branded Entertainment Network, в которой он объясняет, почему стоит перейти на Python.
Да, Excel — важный инструмент для компаний. До сих пор им пользуются аналитики и ученые. Но для большинства задач он не подходит. Вот пять причин, почему пора перестать использовать Excel и перейти на Python.
Причина 1. Масштабирование и автоматизация
Excel хорош, когда нужно за раз проанализировать небольшое количество данных. Но для масштабных вычислений он не подходит. Excel поддерживает данные размером до 1 048 576 строк и до 16 384 столбцов.
Python может масштабироваться до объема памяти. Кроме того, у него есть много инструментов, поддерживающих вычисления и вне памяти устройства. Например, с помощью библиотеки Dask можно масштабировать вычисления для работы на внешнем кластере, а не только на ноутбуке. Если вы уже работали с Pandas (библиотекой для анализа и обработки данных), то тут используется почти такой же код для чтения в формате CSV:
Всего одна строка кода, и вы можете прочесть данные, объем которых превышает размер памяти компьютера. В Excel это сделать невозможно.
Кроме того, Python можно использовать для работы с несколькими источниками данных. Если Excel — это одновременно и хранилище, и вычислительный механизм, то Python полностью независим. Если вы можете найти способ прочитать данные в Python, вы сможете их использовать. У Python много библиотек, поэтому можно анализировать данные из разных источников, будь то CSV, Excel, JSON или SQL.
Наконец, Python незаменим при автоматизации. Этот язык программирования позволяет напрямую подключаться к базе данных и выполнять обновления автоматически. С его помощью можно проводить расчеты, создавать отчеты или динамические дашборды, экономя массу времени. В Excel многое надо вводить вручную, а обновления нельзя автоматизировать.
Python может напрямую подключаться к базе данных для автоматических обновлений. Источник: NobleDesktop
Получите перспективную профессию с нуля за 6 месяцев. Вы начнете с Google-таблиц и освоите все инструменты, необходимые в работе junior-специалисту: SQL, Python, Power BI, математическую статистику. Помощь в трудоустройстве.
Причина 2. Воспроизводимость
Воспроизводимость — это когда вашу аналитику или визуальный отчет легко может повторить другой человек. Он должен суметь не только перезапустить процессы и получить точно такой же результат, но и пройти те же самые шаги. Воспроизводимость важна при автоматизации, но настроить ее в Excel сложно.
Дело в том, что расчеты в ячейках Excel практически невозможно проверить по любой шкале измерений. Типы данных сбивают с толку — не всегда то, что вы видите, представлено в необработанных данных. Да, в Excel можно использовать VBA (Visual Basic for Applications) и он немного улучшает воспроизводимость.
VBA — это язык программирования, разработанный Microsoft и предназначенный для работы с пакетами Microsoft Office. Он позволяет писать программы прямо в файле и создавать макросы — набор команд для автоматического выполнения задач. При этом не нужно устанавливать среду для разработки — она уже есть в самом Excel.
Но лучше все же потратить время на изучение Python.
Посмотрите на этот документ в Excel:
В столбце с sum должна отображаться сумма чисел из столбцов A и B, но как это проверить? Вы можете проверить одну из формул и увидеть, что это на самом деле сумма, но поскольку каждая ячейка тоже может быть формулой, то результат неверный. Если не проверять все вручную, то можно пропустить ошибки.
А в Python эти расчеты выглядели бы так:
Код простой и понятный, с его помощью можно легко проверить, что сумма рассчитана правильно.
C Python вы получаете все инструменты, предназначенные для того, чтобы улучшить воспроизводимость и совместную работу программистов.
Вдобавок ко всему, Python превосходит возможности подключения к данным. С его помощью можно анализировать данные в облаке и мгновенно повторять этот процесс. Git (распределенная система управления версиями), модульное тестирование, документация и стандарты форматирования кода широко распространены в сообществе Python.
В третьей версии Python можно добавить статическую типизацию, чтобы сделать ваш код более понятным. Все эти инструменты упрощают процесс создания кода и обеспечивают его правильное написание. В следующий раз, когда кто-то будет смотреть ваш код, он сможет легко его понять и воспроизвести.
Причина 3. Гибкость навыков
Если вы знаете Excel, это, безусловно, полезный навык, но больше его применить негдекуда. Python же многофункционален. Это не только удобный инструмент для анализа и визуализации данных, но и язык программирования, который можно использовать для чего угодно. Хотите заниматься машинным или глубоким обучением? Создать сайт? Автоматизировать умный дом? Все это можно сделать с помощью Python.
Кроме того, Python намного ближе к другим языкам программирования, чем Excel. Поэтому, зная Python, гораздо легче изучить другие языки. Он открывает больше возможностей, чем Excel.
И, наконец, Python невероятно востребован. По данным Stack Overflow, в 2019 году он стал четвертым по популярности языком программирования в мире среди профессиональных разработчиков ПО, а также первым наиболее востребованным языком программирования. (По данным Stack Overflow на май 2021 года, Python — третий по популярности язык программирования после JavaScript и HTML/CSS.) По оценкам американского сервиса по поиску работы Indeed, средняя зарплата разработчика на Python в США в 2020 году составляла 120 тысяч долларов в год. Неплохо.
Причина 4. Продвинутые инструменты
В Excel есть множество встроенных формул, но они меркнут по сравнению с возможностями Python. У Python не только сотни библиотек, помогающих упростить расширенную статистику и аналитику, но и продвинутые инструменты для визуализации данных.
Это, например, библиотека Matplotlib, Plotly, фреймворк Streamlit и библиотека для статистических графиков Seaborn (все это — инструменты для визуализации данных). С их помощью вы можете прекрасно визуализировать данные, а также создавать интерактивные информационные панели и графики.
Библиотеки Numpy и SciPy поддерживают научные и векторизованные вычисления, линейную алгебру. Библиотека Scikit-learn позволяет применять различные алгоритмы машинного обучения: от дерева принятия решений до градиентного бустинга. Я думаю, xkcd сказал об этом лучше всего:
— Ты летишь, как тебе это удалось?
— Python. Я узнал его вчера вечером! Все так просто! Чтобы запустить программу Hello world, нужно просто напечатать фразу “Hello, world!”.
— Я не знаю… Динамический набор текста? Пробел?
— Присоединяйся к нам! Программирование — это весело! Это совершенно новый мир!
— Но как ты летаешь?
— Я только что набрал import antigravity (импортировать антигравитацию).
— И это все?
— Я также для сравнения попробовал все, что было в аптечке. Но, думаю, причина все же в Python.
Причина 5. Python легко выучить
Учитывая все преимущества Python над Excel, кажется, что он должен быть очень сложным. Но это не так. Посмотрите, как на Java выглядит самая простая программа Hello World:
На Python она займет всего одну строку:
Python — один из самых интуитивно понятных языков программирования. Его могут освоить даже те, у кого нет опыта в написании кода. Хотя обучение Excel может оказаться предпочтительнее, выгоды от него гораздо меньше. Python стоит потраченного времени и усилий, и Excel никогда не сможет с ним сравниться из-за универсальности его дизайна. Расскажем немного про основы анализа и визуализации данных в Python.
Как начать использовать Python для анализа данных
Изучим основные команды и операции в Python, которые потребуются при анализе данных. Первый нюанс — Python использует пробелы и не использует точку с запятой, как и другие языки. Вот очень простой пример:
Импорт функций
Мы будем использовать множество библиотек. Некоторые из них предустановлены вместе с Python, а другие придется поставить самостоятельно. Чтобы загрузить библиотеку, используйте оператор импорта (import statement):
Эта команда импортирует класс Counter (счетчик) из библиотеки collections. Counter — полезный инструмент для дата-аналитиков. Он помогает подсчитать, сколько раз элементы появляются в коллекциях, например в списках. Ниже мы написали код, в котором создали список брачных возрастов. Используя Counter, мы можем быстро подсчитать, сколько раз появляется каждый возраст.
Списки на Python
Списки — это полезная структура данных, предназначенная для их хранения. Подробнее изучим их в следующем уроке. Например:
Видно, что мы создали список, содержащий возраст вступления в брак, используя [ ] во второй строке. Затем передали этот список в функцию Counter, чтобы вывести наиболее распространенные значения в виде списка кортежей (tuple).
Кортеж — это неизменяемый список внутри круглых скобок (). Кортежи содержат два элемента: значение и количество раз, когда это значение появлялось в вашем списке. Частота упорядочивает список кортежей. Первым отображается значение с наибольшим числом случаев.
Функции в Python
Функции в Python тоже полезны. Они начинаются с ключевого слова def и названия функции, затем добавляются аргументы в скобках. Вот функция, которая принимает 2 аргумента, x и y, и возвращает sum:
Функции также могут быть анонимными — в них не нужно расписывать всю структуру, указанную выше. Вместо этого можно использовать ключевое слово lambda. Вот та же функция, что и выше, но записанная как анонимная:
Итоги
Пришло время перейти на Python. Больше нет оправданий! Я надеюсь, что эта статья помогла увидеть все преимущества Python и развеять сомнения.
Python для анализа данных
Научитесь за минуты обрабатывать большие файлы и создавать отчеты и автоматизируйте сбор данных из интернета
Собственно САБЖ. Просто часто в последнее время начал слышать такую связку "программирование в экселе", вот и хотелось узнать, является ли это Программированием.
Например, функция пользователя конвертирования десятичного числа в двоичное
Function Conv10_2(X_Decimal As Integer) As String
Conv10_2 = X_Decimal Mod 2
While X_Decimal > 1
X_Decimal = X_Decimal \ 2
Conv10_2 = X_Decimal Mod 2 & Conv10_2
Wend
End Function
Есть программа на VBA, выполняющая некоторый алгоритм. Стало быть создание такой функции есть программирование.
Формула
=СУММПРОИЗВ (ОКРВНИЗ (ОСТАТ (A1/2^(СТРОКА ($1:$10)-1);2);1)*10^(СТРОКА ($1:$10)-1))
для преобразования десятичного числа в двоичное выполняет точно такой же алгоритм, как и функция.
Так вот вопрос. Создание такой формулы программирование или нет?
В экселе делаете программу на VBA? Если да, то это программирование алгоритма программы :)
Программа потом может запускаться при запуске файла екселя и делать что-то.
Нет. Это просто работа с конкретной программой. Работа с медиаплеером является программированием?) ) Просто "программисты" пошли такие, что х** пишут с мягким знаком, для них "пуск" нажать-уже "программирование"))
Ну я все-таки не согласен, тогда выходит что написание чего либо на bash batch perl php lua какие там еще интерпритаторные языки. Тоже не программирование
и какая же параллель должна, по-вашему, прослеживаться между воспроизведением медиаконтента и возможностью внедрять в книги excel модули vba?
В некотором роде, так как навыки те же. Вы попробуйте в VBA (Visual Basic for Applications) написать user-defined функцию по автоматизации расчетов и все будет понятно.
ИМХО, это больше программирование, чем HTML - разметка, хотя многие считают знание HTML программированием ))).
=Serge= Просветленный (35898) Я с вами согласен,но хороший пхп все же надо отнести к языкам программирования.
If сегодня получка=да Then
кошелек=кошелек+x*10^y ' x*10^y - это зарплата
if купить пиво =да Then
иду в магазин
If. If. If. Iffffffff
else
сижу за ПК отвечаю на вопросы по Exlel
end if
else
кошелек=кошелек
end if
Microsoft теперь называет электронные таблицы Excel языком программирования, а с добавлением лямбд он стал полным по Тьюрингу.
Язык программирования считается полным по Тьюрингу, если на нём можно реализовать любой возможный алгоритм. Именно эту возможность реализуют лямбды.
Проект разработала научно-исследовательская группа Calc Intelligence в Кембриджском университете. Они давно поставили задачу превратить формулы Excel в полноценный язык программирования.
LAMBDA могут ссылаться на другие функции лямбды, с любой глубиной вложенных ссылок, даже рекурсивно. Именно это даёт возможность выразить на языке программирования Excel любое вычисление.
В данный момент лямбды доступны участникам программы бета-тестирования Excel.
Изначально исследователи из Укембриджа скептически отнеслись к идее выкатить лямбды на массовую аудиторию. Они считали, что это слишком сложная функция для среднего пользователя Excel. Но потом получили массу восторженных отзывов от тестеров — и изменили своё мнение. Оказалось, что пользователи нашли массу интересных применений для LAMBDA, причём многие из них исследователи даже не могли себе представить.
Кроме того, особые навыки требуются для написания лямбд, а не для их использования. Таким образом, программисты могут расширить сферу применения приложений Excel, не вызывая дополнительных неудобств у конечных пользователей, которые просто воспользуются результатом.
«Интересно посмотреть, как пользователи будут экспериментировать не только с лямбдами, но с типами данных и динамическими массивами. Мы считаем, что эти новые функции функционального программирования изменят подход к работе в Excel», — написал в корпоративном блоге Энди Гордон, старший научный руководитель Microsoft Research.
«В ближайшей перспективе будут реализованы полностью вложенные массивы и эффективные комбинаторы обработки массивов, такие как MAP и REDUCE, которые принимают лямбда-функции в качестве аргументов, — говорят исследователи. — Кроме того, мы надеемся определять функции не только по одной формуле, но и по целому листу с электронной таблицей, это так называемые функции листа (sheet-defined functions) или даже эластичные функции листа (elastic sheet-defined functions). С практической точки зрения, функции листа идут в ногу с потоком типичного проектирования электронных таблиц, позволяя пользователям определять более крупную функцию с помощью нескольких формул, распределённых по нескольким ячейкам».
В посте Microsoft Research от 25 января приводится больше технических деталей, которые могут быть интересны любителям математики и программистам. Есть также видео:
2 марта 2021 года Microsoft официально представила low-code язык программирования Power Fx, который основан на синтаксисе функций Excel.
Язык Power Fx предназначен для настройки процессов в Power Platform — платформе Microsoft для создания бизнес-решений и автоматизации рутинных задач. Это универсальный, декларативный и функциональный язык программирования со строгими типами.
Microsoft планирует открыть исходный код Power Fx под лицензией MIT. Cейчас на Github уже есть этот проект. В репозитории Power-Fx выложена подробная документация на язык, включая типы данных, операторы и идентификаторы, таблицы, переменные и грамматические правила. Также там есть описание возможностей применения Power Fx, например в приложениях на основе холста в Power Apps.
Девиз языка — «Вы можете создать приложение так же легко, как электронную таблицу». Фактически, суть применения low-code как раз состоит в том, чтобы снизить порог входа до уровня продвинутого пользователя Excel.
Power Fx обеспечивает полный спектр разработки от уровня «no code» для тех пользователей, кто никогда раньше не программировал, до «pro code» для опытных разработчиков, без дополнительного обучения или попыток перебраться через стену знаний между ними, позволяя командам с различными знаниями продуктивно сотрудничать и экономить время и деньги.
Power Fx связывает объекты вместе декларативными формулами в виде электронных таблиц. Например, можно представить свойство Visible элемента управления пользовательского интерфейса как ячейку электронной таблицы со связанной формулой, которая вычисляет ее значение на основе свойств другого элемента управления. Логика формулы пересчитывается автоматически, аналогично тому, как это происходит в электронной таблице, что влияет на видимость элемента управления.
Кроме того, Power Fx при необходимости предлагает императивную логику. В электронных таблицах обычно нет кнопок, которые могут отправлять изменения в базу данных, но приложения часто имеют. Один и тот же язык выражений используется как для декларативной, так и для императивной логики.
Power Fx описывает бизнес-логику в кратких, но действенных формулах. Большую часть логики языка можно свести к однострочным формулам с достаточной выразительностью и контролем для более сложных задач. Цель языка состоит в том, чтобы свести к минимуму количество концепций, которые необходимо понять его программисту, в идеале — не больше, чем пользователь Excel уже знал бы.
Так выглядит в преставлении Excel формула из Stack Overflow, которая ищет строку в обратном порядке.
А вот как Power Fx работает с той же формулой, в которой ссылки на ячейки заменены ссылками на свойства элементов управления. При изменении значения элемента управления вводными данными элемент управления Label автоматически пересчитывает формулу и отображает новое значение. Здесь нет обработчиков событий OnChange, которые были бы распространены в других языках.
Microsoft пояснила, что активно работает над интеграцией Power Fx в Microsoft Power Virtual Agents, Microsoft Dataverse и Power Apps на основе моделей.
Microsoft уточнила, что Power Fx будет дополнять языки M и DAX в Power BI, его запуск никак не повлияет на них. Все эти три языка компания продолжит поддерживать. Фактически, M и DAX фокусируются на чтении, формировании, объединении и суммировании больших объемов данных, в то время как Power Fx фокусируется на чтении и записи небольших наборов реляционных данных.
Microsoft будет улучшать Power Fx и приглашает присоединиться к этому проекту всех разработчиков и пользователей. В ближайших планах компании добавить в него именованные формулы, увеличить количество пользовательских функций и функций Excel, расширить типы данных, усовершенствовать обработчик ошибок, включить поддержку динамических схем и декларативных альтернатив App.OnStart.
В конце января 2021 года Microsoft открыла исходный код Extensible Storage Engine, реализациb API JET Blue. Проект доступен на GitHub под лицензией MIT.
В мае прошлого года Microsoft открыла исходный код интерпретатора языка программирования GW-BASIC.
В сентябре прошлого года Microsoft опубликовала исходные коды, а также документацию и примеры, автоматизированного инструмента для разработчиков — Project OneFuzz. Это фаззинг решение в настоящее время уже заменило сервис Microsoft Security Risk Detection Service.
Читайте также: