Excel это язык программирования или нет
Надо внести в онлайновую базу, по работе, 180 записей. Каждая из 15 полей. Обычно мы это делали через CTRL+C/CTRL+V из Ёкселя, куда данные вбивались заранее. Т.к. обычно вносилась одна запись в неделю-две, редко больше.- А тут целых 180, причём надо, как обычно, "вчера".
- В базе имеется возможность импорта (через офлайновый конвертер в XML), но только из CSV и по очень строгим правилам: регистр, разделители, дополнительные поля с UUID, разными для разных случаев, которых нет в нашем исходном файле, плюс порядок столбцов совершенно другой и куча дополнительных полей (пустых или с константами).
Где-то минут за 40 неспешной и творческой работы наваял простенький конвертер, не выходя из Ёкселя:
- страница с настройками и константами
- страница, куда копипастится блок из рабочего файла Ёкселя, который надо экспортнуть
- страница с результатами, которая тупо сохраняется в CSV.
На этой последней странице - все данные вставляются формулами и ссылками на первые две. Причём для разных типов записей подставляются необходимые константы, меняется регистр, где критично, даты перегоняются в текст (т.к. Ёксель при сохранении делает их числами) и т.п. Простых ссылок на ячейку практически нет.
Затем за пару прогонов через утилиту перегнал в XML, подписал ЭЦП и загнал на сайт. Ошибок: 0.
- Это заняло у меня ещё минут 15, вместе с проверкой исходных данных и результата, подписью ЭЦП и проверки, что всё успешно залилось и открывается онлайн.
Стал считать, сколько набивал бы вручную. Я работаю практически только с клавы, поэтому на копипаст 1 поля уходит, пускай, 1 секунда.
- Т.е. CTRL+C ALT+TAB CTRL-V TAB ALT-TAB Right. и так много раз подряд.
- Это 15*180=2700 секунд или 45 минут непрерывной, неотрывной работы.
- Это без учёта необходимости кликнуть в браузере "Добавить запись" и в конце "Сохранить" и промотать колонки в Ёкселе, т.к. их порядок не совпадает с порядком полей на сайте.
- И без учёта возможных косяков при копипащении.
- И часть полей на сайте выбираются из списка и, разумеется, только мышкой. И делать это приходится внимательно, т.к. значения очень похожие внешне.
Ну и да, я НЕНАВИЖУ монотонную работу. Для меня и 10 записей подряд внести напряжно. Так что сидел бы я пару рабочих дней точно.
Потом прикинул, сколько времени это заняло бы у секретаря, которая вобще-то и должна набивать эту базу.
- И которая из клавиатурных комбинаций знает, видимо, только ESC, да и то не уверен. И копировать/вставлять/переключать окна умеет только мышкой.
- Попробовал смоделировать её скорость работы (мышкой) - получилось секунд 10 на одно поле. Т.е. 7.5 часов, опять же - непрерывной, - работы.
- Сколько в процессе будет косяков в базе и сколько данных из других ячеек будет "случайно" вставлено в Ёксель - тут я просто до судорог боюсь представить, со своей педантичностью.
Мораль простая. По возможности, изучайте программирование в целом и формулы MS Excel в частности.
- Это реально ОЧЕНЬ помогает в работе.
- И ОЧЕНЬ экономит нервы.
MS, Libreoffice & Google docs
466 постов 12.8K подписчиков
Правила сообщества
2. Публиковать посты соответствующие тематике сообщества
3. Проявлять уважение к пользователям
4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.
По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях
Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.
Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.
Господа гусары, молчать!
Не говорите ему про VBA.
Мухахаха. Решили шефы цмр внедрить. Выбор пал на Scoro, мол, не дорого и обещали всё настроить и обучить.
До этого база по клиентам(холодные звонки) была в Экселе.
Я попросила на обучении, чтобы показали как импортировать. Шеф сказала, что не будем на это время тратить, они сказали сами всё красиво сделают. По всем странам и фирмам.. Народ, что пришёл от Scoro радостно кивал.
Потом на совещании выяснилось, что у нас не единый документ экселя, а директор каждому продажнику присылала свой, они каждый у себя на компе добавляли и метки ставили. И хоть продажников три человека + директор, но база в 1000 номеров: офис, секретарши, директора, бухгалтера, конкретные сотрудники. Причём записаны они не по названию фирмы, а по торговой марке, что представляют.
Неделю я сводила базу, удаляля дубликаты, оставляла актуальные метки(стоит добавить, что эти дебилы не использовали общий Гугл док, который я создала, а продолжали личные базы)
Ну и получилось на выходе:
торговая марка/страна/чей номер/и дальше блаблабла
Довольная, что за выходные смогла, блядь, всё это свести, и что эти дебилы на выходные точно нихрена не испортят, отослала.
Открываю базу смр, нет, блядь, разделения по странам и в итоге три страны на одну вкладку, из номеров офисов остались только тот, что из верхней по алфавиту страны, всех сотрудников туда приписали. Ебать у меня горело. Пиздец у меня горело. Ещё и шеф, блядь, на меня ругался, что я напортачила) причём, я просила при мне показать пример переноса. Да и продажнику сами луни, они не понимали, что один и тот же человек может быть представителем нескольких марок.
В итоге мне пришлось убить ещё выходные, чтобы привести всё в порядок, потому что луни-продажники пошли там строчить и прочие хуйню творить..
Но как в итоге оказалось, это было, блядь, только начало.
Собственно САБЖ. Просто часто в последнее время начал слышать такую связку "программирование в экселе", вот и хотелось узнать, является ли это Программированием.
Например, функция пользователя конвертирования десятичного числа в двоичное
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 в exel - это все же бейсик хоть и кастрированный
В экселе делаете программу на VBA? Если да, то это программирование алгоритма программы :)
Программа потом может запускаться при запуске файла екселя и делать что-то.
Нет. Это просто работа с конкретной программой. Работа с медиаплеером является программированием?) ) Просто "программисты" пошли такие, что х** пишут с мягким знаком, для них "пуск" нажать-уже "программирование"))
Ну я все-таки не согласен, тогда выходит что написание чего либо на bash batch perl php lua какие там еще интерпритаторные языки. Тоже не программирование
и какая же параллель должна, по-вашему, прослеживаться между воспроизведением медиаконтента и возможностью внедрять в книги excel модули vba?
В некотором роде, так как навыки те же. Вы попробуйте в VBA (Visual Basic for Applications) написать user-defined функцию по автоматизации расчетов и все будет понятно.
ИМХО, это больше программирование, чем HTML - разметка, хотя многие считают знание HTML программированием ))).
хтмл язык разметки, он никак не язык программирования. я пхп программированием с трудом называю
=Serge= Просветленный (35871) Я с вами согласен,но хороший пхп все же надо отнести к языкам программирования.
Программирование. Все, где используется условный оператор - программирование.
If сегодня получка=да Then
кошелек=кошелек+x*10^y ' x*10^y - это зарплата
if купить пиво =да Then
иду в магазин
If. If. If. Iffffffff
else
сижу за ПК отвечаю на вопросы по Exlel
end if
else
кошелек=кошелек
end if
Excel для аналитика как одна из любимых удочек для рыбака. В арсенале практикующих аналитиков таких удочек конечно несколько ( здесь я писала об этом подробнее), но excel всегда будет в наборе "на выход".
Мое знакомство с excel было скачкообразным. С каждым новым открытием кажется, что мир с excel уже не будет прежним. Путь знакомства с этой программой я бы разделила на несколько этапов:
1. Первое знакомство с excel . У меня оно произошло на 1 курсе института. Открывая интерфейс, проходя по ленте и вводя первые простые формулы я удивлялась "а где же он был раньше, когда я училась в школе". Этот этап достаточно короткий, но очень красочный, каждая кнопка и вкладка знакомит тебя с мощнейшим функционалом этой чудо - программы.
2. ВПР и простейшие диаграммы . До сих пор помню ощущение от знакомства с ВПР. Казалось "ну теперь я точно могу горы свернуть". Как наивна я была. Но это очень важный этап, когда ты понимаешь, что простейшие операции и диаграммки в excel - это лишь верхушка айсберга. Ты начинаешь подозревать, что от тебя скрыто еще слишком много. На этом этапе обычно ты знакомишься с первыми книгами и форумами по excel и формируешь свой список того, что еще надо изучить.
3. Сводные таблицы и сложные формулы . На этом этапе я почувствовала реальный скачек в изучении excel. Сводные таблицы - это один из самых эффективных способов расчета и форматирования данных. А написание сложных формул (таких как, например, ИНДЕКС ПОИСКПОЗ или использование массивов данных) позволяет выполнять трудоемкие расчеты за несколько минут.
На этом этапе я бы посоветовала приобрести книгу "Сводные таблицы в Microsoft Excel 2013" авторов Билла Джелен и Майкла Александер. В ней подробно отражены нюансы работы со сводными таблицами, которые не до конца раскрываются в статьях на просторах интернета и на форумах.
4. Power Query и Power Pivot. До этого этапа обычно доходят те, кому приходится работать с выгрузками > 50 000 строк или с данными из различных источников. Мощные инструменты для работы с данными. Здесь я поняла, что возможности excel практически безграничны :).
5. VBA . Ну а это уже уровень hard, для тех, кто пошел по пути погружения на 100%. :) Язык программирования логичный, достаточно просто организованный. Для его изучения понадобится немалое время, но это окупится сторицей, результаты не заставят себя ждать.
А на каком этапе сейчас находитесь вы?
✔ Ищите ответы на свои вопросы в статье Фишки excel - подборка статей . Там я перечислила все свои статьи по разбору работы функций excel.
✔ Вот здесь есть подборка видео о том, как строить необычные диаграммы - Фишки 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 был более понятен, чем что-либо совсем новое
Заключение
Надеюсь, для кого-то заметка будет полезна и позволит сэкономить время на выборе стека для решения своих задач.
Читайте также: