211

Надстройка для MS Excel (часть 2)

Всем привет!

В прошлом посте я представил на суд общественности свой open-source проект - надстройку для MS Excel, с набором полезных функций. Пост был встречен очень тепло, многие пикабушники оставили пожелания о добавлении новых функций, а несколько человек написали мне с предложениями подключиться к разработке. Спасибо @1041618 за редизайн - мы обзавелись новыми иконками в едином стиле и поддержкой серой и тёмной тем, а также учитываем в локализации язык пакета MS Office.

Исходный код проекта и инструкции по установке и использованию опубликованы на GitHub под лицензией MIT (неограниченное право на использование, копирование, изменение).


В этом посте я хотел бы продолжить описание функций надстройки, уверен - многим они покажутся весьма полезными.

Транслитерация кириллицы в латинские буквы


Конвертирует содержимое текстовых ячеек, содержащих символы кириллицы, в латинские символы (по стандарту ICAO doc 9303), за идею спасибо @negotivko

Подсветка дублей


Раскрашивает разными цветами группы одинаковых значений:

«Размерживание» объединенных ячеек с их заполнением


При разбиении объединенных ячеек стандартной функцией Excel все ячейки области, кроме левой верхней, остаются пустыми. Но теперь можно заполнить их значением исходной ячейки:

Экспорт таблицы в markdown


Markdown - это удобный язык разметки, используемый при форматировании текстов во многих системах: wiki (Confluence), GitHub, Gitlab, Reddit, Stack Exchange, OpenStreetMap и множество других. Функция копирования таблицы в markdown помещает в буфер обмена отформатированную таблицу с заголовками, и Вы легко можете вставить ее в свой документ:

Проверка значений в выделенных ячейках (числа, даты, ИНН ЮЛ/ФЛ и т.д.)


Можно проверить, например, список ИНН организаций на корректность (по контрольным цифрам в номере):

Кроме того, есть две функции по работе с XML-файлами. Они не относятся напрямую к функциональности Excel, но иногда в них возникает потребность:

Сформировать пример XML файла на основе XSD-схемы


Если у вас есть файл XSD, который содержит xml-схему, Вы можете сформировать образец XML-файла на основе этой схемы:

К сожалению, сформировать документ, который бы полностью соответствовал всем описанным правилам, невозможно - некоторые ограничения определяются паттернами (например, регулярными выражениями). Тем не менее, это поможет получить наглядное представление о структуре XML-документа.


Проверить XML по XSD-схеме


Позволяет проверить имеющийся XML-документ на соответствие схеме, описанной в XSD-файле. Выберите оба файла, и при наличии ошибок все они будут выведены на лист Excel.

Установка надстройки


Для установки надстройки выберите последнюю по времени успешную сборку пайплайна NavfertyExcelAddIn - Publish и скачайте опубликованные файлы:

Важный момент: при установке надстройки Excel "запоминает" путь к папке, из которой она была установлена, и в будущем установка обновлений будет возможна только из этой папки, в противном случае нужно будет воспользоваться "установкой и удалением программ" через Панель управления Windows. В настоящее время исследуется вопрос о публикации установочных файлов в сети для облегчения процесса установки и доставки обновлений.


Для установки надстройки нужно запустить файл .vsto


Хотел бы предупредить об одном ограничении: при вызове функций надстройки (как COM-надстроек, так и VBA) в MS Excel очищается стек последних действий пользователя для отмены (Undo). Я работаю над тем, чтобы обойти это ограничение хотя бы для возможности отмены выполнения самой функции, но пока что будьте внимательны при запуске функций - отменить действие можно будет, только закрыв книгу без сохранения.


Более подробная инструкция по установке, а также инструкции по использованию и исходный код - на странице проекта в гитхабе:

https://github.com/navferty/NavfertyExcelAddIn


Спасибо всем, кто предлагал идеи по улучшению проекта в комментариях к прошлому посту. Если у Вас есть новые идеи - оставляйте комментарии!


Если Вы .NET-разработчик и хотите присоединиться к работе над проектом, пишите мне на почту (указана в профиле гитхаба), заводите issue и пулл-реквесты.

Если Вы только изучаете платформу .NET, и хотите поучаствовать - не стесняйтесь! Читайте исходный код, задавайте вопросы, если что-то непонятно - буду рад объяснить и поделиться знаниями =)

MS, Libreoffice & Google docs

762 поста14.9K подписчика

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

Интересное начинание!

Сам много лет пользуюсь бесплатной ASAP.


Для русских букв написал себе макросы и вывел на кнопки - подсветить рус/анг (бывает полезно, когда в большой иностранной номенклатуре скрытые русские буквы и наоборот), заменить рус на англ и наоборот, удалить все русские (удобно, когда номенклатура на англ, но описание рядом в той же ячейке на русском и оно не нужно).


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

раскрыть ветку (8)
Автор поста оценил этот комментарий

Можно добавить загрузку курсов (на прошлой работе даже делал именно загрузку курсов с сайта ЦБ, и именно на VSTO), но насчет автообновления не уверен

раскрыть ветку (7)
0
Автор поста оценил этот комментарий

Автообновление — это когда завтра открою эту книгу, то и курс будет завтрашний, а не вчерашний. Можно ещё рядом выводить текущую дату, и на эту дату показывать курс. Надо на другую - указываю другую дату, и курс меняется.


Я читал про парсинг с сайта ЦБ, но там всё как-то сильно не просто и готовые рецепты у меня не заработали.

раскрыть ветку (6)
1
Автор поста оценил этот комментарий
Если значения с денежными единицами у вас чётко позиционированы, то макрос можно поставить на автозапуск. Тогда при каждом запуске файла макрос будет подгружать текущий курс и перезаписывать все ячейки указанного в нём диапазона.
раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Я бы с радостью, но те полтора макроса, что я видел, у меня не заработали.


Вообще удивлён, что такая вроде простая и востребованная функция не имеет простого и решения. То, что я видел - это какая-то дичь или с парсингом html (который меняется и всё рушится), или json запросами и парсингом ответов, в общем - жуть.


Неужели никому кроме меня не нужен текущий курс валют в таблицах?)

раскрыть ветку (3)
2
Автор поста оценил этот комментарий

Мне не спится, вот набросал на скорую руку. При открытии книги обновляет курс:

https://github.com/navferty/CBR-VBA-Currencies


Там наивная реализация, запрашивает курс не только при открытии книги, но и при изменениях на листе. Поэтому если будет много изменений, и много ячеек с такой формулой, можете заддосить сайт ЦБ))

Так что можно еще доработать напильником, в зависимости от потребностей

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо, завтра потестирую!

0
Автор поста оценил этот комментарий

Странно, там у них нормальное API. Если будет время, отпишу тут на выходных с примером VBA, а также заведу тикет в проекте, чтобы добавить эту функцию туда

Автор поста оценил этот комментарий

вот тут предлагают способ форсировать рекалькуляцию UDF-функций, определённых в макросах
https://superuser.com/questions/1261444/custom-formula-not-u...


Public Function MyFunction(Target As Range, Optional VolatileParameter As Variant)

=MyFunction(A2,Now())

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества