All streams
Search
Write a publication
Pull to refresh
5
0.2
Send message
public static double ComputeAreaModernSwitch(object shape)
{
    switch (shape)
    {
        case Square s:
            return s.Side * s.Side;
        case Circle c:
            return c.Radius * c.Radius * Math.PI;
        case Rectangle r:
            return r.Height * r.Length;
        default:
            throw new ArgumentException(
                message: "shape is not a recognized shape",
                paramName: nameof(shape));
    }
}


Пример отсюда
Знакомая предложила эту же статью на Яндекс дзен опубликовать. Правда площадка для меня неизвестная, но видимо буду изучать =)
Вряд ли там наберется материала на 8 постов, тем более некоторые функции там достаточно тривиальны. Поэтому решил оформить одним постом, и вот три часа назад опубликовал: в комментариях пост был принят достаточно тепло, а на гитхабе прибавилось несколько звёздочек и целых 6 человек сегодня клонировали репозиторий)) Спасибо Вам за мотивацию! =)
вкладка полезна людям, которые пользуются макросами в экселе

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

Частая боль при работе с числами, отформатированными как текст
При обработке выгрузки из сторонней системы в эксель числа отформатированы как текст, и их нельзя ни просуммировать, ни среднее арифметическое посчитать. Приходится изобретать хаки (например, при помощи функции «текст по столбцам»). В моей надстройке есть функция, которая позволяет преобразовать текст в числа, гибко учитывая различные десятичные разделители: например, «12.34», «56,78»). Конечно, такая гибкость может и подвести — например, для «1.234» неочевидно, является ли точка разделителем дробной части или тысяч.


Поэтому предполагаю, что круг людей, которым проект может быть полезным, гораздо шире. Вот список функций:

Список остальных функций
  • подсветка дублей (разными цветами группы одинаковых значений)
  • переключение регистра («пример» -> «Пример» -> «ПРИМЕР»)
  • очистка текста от «лишних» пробелов по краям ячейки и повторных пробелов в середине
  • интерактивный поиск всех формул с ошибками ("#Н/Д" и другие) на листе
  • «размерживание» объединенных ячеек с их заполнением
  • снятие пароля с защищённой книги и листов
  • экспорт таблицы в markdown
  • проверка значений в выделенном диапазоне ячеек (числа, даты, валидный текст для XML и т.д.)

Также есть функции по работе с XML, не относящиеся напрямую к Excel, но в которых иногда возникает потребность, а инструмента, который бы свободно распространялся и вызывал доверие, у меня сходу найти не получилось:
  • сформировать пример XML файла на основе XSD-схемы
  • проверить XML по XSD-схеме


На пикабу я не решился писать «рекламный» пост именно о своей надстройке, и описал общие приемы и советы по отладке VBA и созданию xlam-надстройки, лишь в конце упоминая свой проект. Вот сейчас задумался, может быть всё-таки стоит представить свой проект отдельным постом — конечно, читателей Хабра таким не впечатлить, но на Пикабу может зайти. =)

P. S. подписался на Вас, буду читать новости о «малиновых» компьютерах)
Репозиторий проекта на гитхабе (под MIT лицензией)
github.com/navferty/NavfertyExcelAddIn

Внешний вид вкладки в Excel
image


Одна из попыток привлечь людей вылилась в пару статей по VBA на Пикабу, в лиге MS Office — сами статьи были приняты хорошо и получили относительно неплохой рейтинг (можно найти по автору, ник такой же — navferty), но «рекламная» приписка в конце поста не привлекла людей к самому проекту.

Да и с личной потребностью тоже получилось неоднозначно. Раньше довольно активно пользовался Excel (в бытность налоговым инспектором-камералом), но с тех пор как сменил профессию и стал разработчиком, возвращался к нему разве что в отдельных проектах автоматизации Excel (на VSTO) или чтобы изредка помочь бывшим коллегам свести большие таблицы.
Прошлой осенью начал пет-проект, идею которого давно вынашивал — надстройка общего назначения для Excel. Потом стало меньше свободного времени, и постепенно забросил работу над ней, но десяток функций готовы (например, парсинг чисел из текстового формата, очистка от пробелов, экспорт в маркдаун). Знаю, что многим эти функции могут быть полезными, столкнулся с падением мотивации из-за отсутствия пользователей, и соответственно обратной связи от них.

Может быть, знающие люди смогут посоветовать способы привлечь аудиторию или разработчиков-единомышленников (проект на VSTO, .NET Framework)?
Если понадобится ещё пара рук, готов присоединиться! Пишите в ЛС, буду рад помочь =)
Тоже заглянул написать аналогичный комментарий. Замечание про возможность ошибиться особенно актуально для плацкартного вагона — где места в одном «купе» физически не объединены, в отличие от мест по разные стороны одной стенки (в соседних «купе»). Поэтому я сам, в новой схеме, долго бы гадал при выборе мест.
Меня тоже немного зацепило, но, справедливости ради, надо отметить, что .NET Core стал популярным сравнительно недавно, а в статье упомянута большая инерционность программ обучения.
две разных кнопки: «смотреть доклад в реальном времени» и «смотреть с начала»

Не знаю, как у Вас планируется реализовать трансляцию, очень хотелось бы иметь возможность, как в YouTube, изменять скорость воспроизведения. Например, если опоздал на несколько минут, можно смотреть сначала, но постепенно «нагнать» прямую трансляцию.
Вода скатится как со скатов крыши — если с левого края есть «возрастающая последовательность» (или с правого — «убывающая»).
Не мог понять суть задачи по описанию, пока не изучил иллюстрацию. Думаю, лучше использовать термин «высота» стен, а не «длина»: под длиной стены обычно понимают её размер в горизонтальном направлении
Оригинальная идея, очень круто!

Единственное, что, вместо правки исходников, вероятно можно было просто изменить режим редактирования, которому соответствует переменная iFileWatchingMode — и значение 2 как раз отвечает за тихое отображение нового содержимого файла:
if ((iFileWatchingMode == 2 && !bModified && iEncoding == iOriginalEncoding) ||
MsgBox(MBYESNO,IDS_FILECHANGENOTIFY) == IDYES) {

Конечно загляну! Я в ноябре у вас в викторине книжку Акиньшина выиграл :P
Спасибо, сподвигли взять билет, до подорожания цен с января! =)
Если смотреть из лагеря C#, то F# можно назвать «лабораторией», где обкатываются некоторые концепции, которые потом могут быть позаимствованы. Тот же LINQ, без которого сложно представить C#, readonly struct, на подходе Record. Да и в целом идеи иммутабельности и функционального подхода проникают. Ещё мне лично очень понравились Type Providers в F# — создаёшь такой провайдер для csv файла, или например какого-нибудь API — и типы будут определены автоматически:
image
Не нужно создавать классы для записей, IDE сама в фоне определит набор столбцов.
Для того, чтобы было удобнее делиться своими разработками, могу предложить автору два варианта реализации:
  • Сохранить документ как шаблон с макросами (*.dotm). Установка гораздо проще: достаточно зайти в меню (Опции->Надстройки (Add-Ins)->Надстройки Word, и добавить соответствующий шаблон.
  • Использовать VSTO для реализации COM-надстройки. Установка с помощью ClickOnce вообще не потребует от пользователя каких-либо действий в настройках MS Word. Впрочем, Вам придётся установить для разработки Visual Studio, и использовать язык C#. Готов помочь в ЛС, если у Вас возникнут вопросы =)
Если необходимо дать пользователю возможность самостоятельно указать последовательность действий, то как вариант, можно отдельно предусмотреть выбор этапов, и запуск всей цепочки действий по кнопке/сочетанию клавиш. На мой взгляд, детерминированный запуск алгоритма более надежен, и не потребует настройки пересчета ячеек в опциях MS Excel.

Сам выбор шагов можно сделать на основе, например, Data Validation — будет доступен удобный дроп-даун для выбора шага из заранее указанных вариантов
Пример выбора шагов
image

Обратная сторона — придётся добавить немного вспомогательного кода, для запуска соответствующей функции исходя из имени шага.
Присоединюсь к вопросу qyix7z
Правильно я понимаю, что пользователь вводит в ячейку UDF функцию, которая и запускает код? Других способов запуска (нажатие на кнопку, обработка событий листа/книги) не предусмотрено?

Такой способ запуска был сознательно выбран?
Раньше доводилось много заниматься «разработкой» на VBA под Excel. Могу предложить автору рассмотреть более привычные для пользователей способы запуска макросов (начиная от назначения сочетания клавиш/кнопки на понели инструментов) до вёрстки кастомной панели (Ribbon) на ленте MS Excel.
Если пользователь выбирает из множества этапов, можно подумать о UserForm с набором чекбоксов, либо служебный лист Excel, в определенных ячейках которого до запуска алгоритма пользователь проставляет, например, знаки "+"
PavelBryz, могу подсказать по реализации в ЛС

Information

Rating
2,874-th
Registered
Activity