Pull to refresh

Comments 31

Спасибо! Надо заняться изучением VBA

А также очень похожим на него StarBasic из свободного офисного пакета LibreOffice. И Python до кучи, потому то он тоже есть в LibreOffice. Списки из статьи в LibreOffice можно универсально организовать в любом приложении - тексте, таблице, рисунке, презентации по нажатию Ctrl+Shift+F4, используя для фильтрации данных удобную прослойку из SQL-запросов. Все это работает десятилетиями и достаточно надёжно. PowerQuery - кандидат на удалённую блокировку #1, поскольку ассоциирован с пользователями. Хотя я не алармист, но тревожно...

Недавно была новость, что и в Excel питона завезли.

Завезли, но ограниченно: в W10/11 c WSL и только в MSO 365. И намедни пообещали MSO 365 заблокировать для РФ. Впрочем, даже с MSO 2007 доступен Python c либами XLwings и PyXLL (это работает через COM, своеобразно, но работает).

Разве что, только для себя. В корп секторе лицензий на Excel уже не будет, Microsoft блокирует целый ряд приложений и сервисов.

Да, я долго раскачиваюсь))

Для более лучшей читабельности можно чтобы функция, которая извлекает числа из текста разделяла символом "_", а не "х". Лучше ведь "128_8", чем "128х8". Хотя, этот не так важно

Согласен, функция может пригодится и для работы в других макросах

Для автоматизации рутины совсем неплохо
Статью можно было разбить на две разные, читалась бы легче

1 Есть ли что-то простое, чтобы формы Excel формировались в html, т.е., обработка таблиц на VBA, но экранные формы не во внутреннем формате, а публикуются как html (включая ввод данных в форму для изменения значений ячеек таблица).

js-библиотеки есть, но хотелось бы что-то готовое, что позволяло бы представить обычную форму excel (vba) в виде html-странички, примерно, как это в гугл-таблицах.

2 Есть что-то готовое, типа (задача): есть три (много) справочника (таблички именованных объектов). Каждый объект одного справочника связан с объектом другого один ко многим. Хотелось бы выбрав один объект, увидеть с какими объектами каждого другого справочника он связан. При этом связь достаточно задать один раз: задали в справочнике 1 связь: А (объект справочника 1) - связан с Б (объект справочника 2) и при анализе связей из справочника 2, мы определим, что Б связано с А. Видимо связи между объектами разных справочников нужно задавать не в отдельном (каждом) справочнике, а где то отдельно?

Пример: есть список (справочник) процессов, список типовых форм и список НД (нормативный документ). В каждом списке кроме имени объекта - еще поля его свойств. Выбрали справочник процессов, выбрали в нем нужный процесс и рядом в окне с именем "типовая форма" увидели все названия типовых форм (с их свойствами), привязанных к этому процессу. В соседнем окне аналогично выводятся все названия НД (с параметрами НД), которые привязаны к выбранному процессу. Может быть есть готовое красивое решение?

Связи получаются парные, поэтому руками дублировать их не хотелось бы в каждом справочнике, т.е. связь: А-Б в справочнике 1, должна автоматом дублироваться в справочник 2: Б-А. Или какой-то иной подход. Т.к. связь один ко многим, то для указании связи придется делать какие-то ухищрения, типа строка с id через запятую - со всеми связями к этому объекту.

1.Зачем? HTML априори медленнее внутренней реализации. Я сейчас борюсь с таблицами в Р7, но даже там, при том что всё почти построено на JS+HTML на ядре Chromium,сама таблица рисуется бинарным кодом где то глубоко внутри и только выводится в канву. Поверьте, тот способ общения с таблицами что есть в Excel+VBA почти идеальный вариант любой работы с ними
2.Вы что то пытаетесь разные задачи в одну запихать. Иерархические справочники (и объекты в целом) чаще всего крайне не удобны для табличных представлений, и наоборот. Не даром, умные люди очень давно разделили это всё, и в одну кучу не пихают (если что, я про визуальную составляющую GUI, а не про форматы хранения такого рода представлений). То что вы описывате для примера, можно реализовать даже на VBA, но это будет крайне глючное, и медленное решение, так как для подобного рода задач вам нужен инструмент типа Access, но никак не Excel.

чтобы формы Excel формировались в html, т.е., обработка таблиц на VBA, но экранные формы не во внутреннем формате, а публикуются как html (включая ввод данных в форму для изменения значений ячеек таблица).

js-библиотеки есть, но хотелось бы что-то готовое, что позволяло бы представить обычную форму excel (vba) в виде html-странички, примерно, как это в гугл-таблицах.

Однажды несколько лет назад посмотрел как сохраняются рабочии книги Excel в облаке mail.ru! Реально в html, границы таблиц черточками прорисованы!!! Совсем не как в гуглотаблицах… Лютая жесть!

Здравствуйте. На данный момент у сервиса Облако Mail.ru реализован Мой Офис и документы на просмотр открываются как положено.

документы на просмотр открываются как положено.

Где только на это можно посмотреть?

Это можно сделать на Python во фреймворке Streamlit на 20 строк кода, который все хранит в SQLite или в том что ещё быстрее. Только тут для VBA и Excel работы уже не будет - экосистема Python c Pandas умеет всё, включая генерацию Excel-файлов.

Web нужен по существу, для доступа с любых устр-в по всему миру? Если нет - обратите внимание на LibreOffice: в нем Формы ввода формата odt можно просто разослать пользователям по LAN и все данные будут автоматически одновременно попадать в базу данных любого проф. формата. И да, это без Макросов вообще. Добавив макросы можно сделать всё остальное. Код на vba в LibreOffice на 80% работает без переделки.

Хотелось бы все же на Excel. Там целая экосистема, включая, например, связку с Visio (и автономная задача для Visio \ Word \ Outlook \ Project и др.). Плюс, все хорошо знают таблички Excel. Не хватает только к нему научиться web прикручивать, точнее штатные формы публиковать в html или как вариант рисовать аналогичные экранные формы, но в другом конструкторе, который уже дружит с web и понимает объектную модель Excel.

Штатный web-функционал Excel и ШП позавчера умерли. Продолжаете делать ставку на дохлую лошадь?

Вы можете нарисовать формы на том что я написал и заменить одну строку:

df.to_excel('*.ods')

на

df.to_excel('*.xlsx')

И дальше пилите на VBA. Но помните что вы плодите сущности и отстаете от трендов, и что таблички Excel и Calc - давно одно и то же, с одинаковыми русскоязычными формулами, и VBA код в Calc работает на 80%, а остальное можно переписать за несколько дней, и оно будет работать вечно.

Что же касается web-форм, их можно делать не только в Streamlit, но я вам показал кратчайший путь, чтобы сделать свой Google Sheets.

Может быть есть варианты (например, сторонние плагины), которые позволят в LibreOffice связывать Calc и Draw, т.е. некое подобие штатной связки Visio - Excel или как то иначе экспортировать и импортировать (типа как в visio «Данные фигуры») данные в Calc \ Draw? Т.е. векторные рисунки Draw должны быть связаны с внешним источником (таблицами, БД), откуда подсвечиваются (берутся) атрибуты графического объекта (примечание к объекту "Документ", родительский объект, тип объекта и т.п).

Если есть такое, то где почитать? Может что-то аналогичное есть для Drawio (связь с таблицами Calc, Excel или БД)?

Программирование на StarBasic/LOBasic поддерживают все приложения OpenOffice|LibreOffice: Writer, Calc, Impress, Draw, Base: https://wiki.documentfoundation.org/Documentation/Publications/ru (и в 3Х больше на английском на офсайте https://documentation.libreoffice.org/en/english-documentation/)

Но не обойтись также без глубокого перепрочтения 3-х книжек Питоньяка, 3-х Форумов и сильного желания полюбить этот большой и сложный офисный пакет.

Хоть какая то интеграция Calc с Draw есть? Штатная или через сторонние примочки?

Ctrl+Shift+F4, Calc-файл подключить как базу данных в Base. Это Calc->Draw. С обратно - сложнее:

Параметры объектов в Draw можно считать макросом и сохранить в Base. Формат базы нужно выбрать не сердцем, а умом (SQLite, MySQL итд).

Вопрос обобщил тут а конкретный пример привел тут

Хотелось бы ссылку на конкретный пример (за ссылки на guide тоже спасибо) связки Calc->Draw и Draw -> Calc, а в идеале двухсторонней связи, типа Visio BackSync

Формат базы нужно выбрать не сердцем, а умом (SQLite, MySQL итд).

Не понятно, если речь про связку по данным Calc и Draw, то зачем нужен выбор, тем более "сердечный".

Связка Drawio и Calc - не встречалась?

импортировать (типа как в visio «Данные фигуры») данные в Calc \ Draw?

LibreOffice 7.5.1.2 в приложении Draw не нашел аналога Shape Data (Custom Properties).

не обойтись также без глубокого перепрочтения 3-х книжек Питоньяка, 3-х Форумов и сильного желания полюбить этот большой и сложный офисный пакет.

Каюсь, это всё я не успел почитать!

Наиболее выносящим мозг отличием StarBasic от VBA является более сложная объектная модель, разделенная на MVC - Model, View, Controller. То что было Shape на VBA может быть чем-то из M, V, C. И при этом нет способа обратиться к объекту по имени, можно лишь перебрать их все, считать имена и после этого продолжить с ним работу. В "батарейках", в либе Tools есть три функции getControlModel, getControlShape итд. Изучите их. От многих событий мыши легко получить контекст (на чем кликнули) через св-во Event.

Хорошо бы найти (составить) сопоставление обоих объектных моделей.

Такого документа не существует ввиду разнонаправленного движения данных программ и значительных их различий (крупное я описал выше). Но есть несколько старых рекомендаций на офсайте по переходу с VBA на Basic.

Отличия не только в API и объектной модели. Разнятся даже подходы к изучению.

Лучший способ изучать VBA в Excel - макрорекордер, особенно выведенный на второй монитор (realtime code render)

Лучший способ изучать LO Basic - книги Питоньяка. Макрорекордер в OpenOffice|LibreOffice есть, но он записывает команды прослойки - т.н. Диспетчера, и примерно половину команд не ловит, и на второй монитор ничего до конца записи не выводит.

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

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

  2. Приготовьте хороший автобэкап, т.к. крашатся макросы во время разработки на раз-два, нередко приводя не неоткрываемым файлам.

  3. Excel + git - это боль. Бинарный формат, этим все сказано. Read-only дифы с помощью самописных/3rd-party тулов возможны, мержи скриптов - тоже (потратил порядка недели для написания питоновских скриптов для 3-way merge), полноценные мержи страниц и контролов - если знаете, то расскажите как. Работать параллельно над одним и тем же файлом используя git из-за этого практически невозможно.

  4. Одна из основных концептуальных проблем с экселем - слитые воедино логика (формулы и макросы) и данные (содержимое ячеек). Из-за этого невозможно просто починить макрос в одном файле и распространить эти изменения на все файлы, которые содержат копию этого макроса. Лично я решил эту проблему "проксированием" содержимого ячеек в JSON: при сохранении эксельника сохраняется не сам файл, а его содержимое перенаправляется в JSON. При открытии такого эксельника JSON автоматически загружается в ячейки. С таким подходом можно использовать один и тот же эксель файл для нескольких файлов проектов. Метод естественно имеет довольно много ограничений.

Да, в том то и дело что коллеги жить не могут без экселя, т.к. вся основная их работа - в цифровизации документации. А я, а я просто увлекаюсь программированием, вот так и столкнулся с VBA, когда потребовалось автоматизировать рутину.

С автобэкапом согласен на все 100. Был случай, когда при открытии файла макросы просто куда-то пропадали... Причем файл никак не был поврежден. Excel и git не пытался связать (Шаблон с макросами весит не особо много, поэтому все версии изменений храню на локальном и часть - на облачном), поэтому и подсказать тут не смогу.

За JSON отдельное спасибо, не рассматривал даже его для таких целей.

В LibreOffice есть способ ещё лучше чем JSON: экспорт/импорт в CSV с поддержкой... Формул! Вы получаете неубиваемый формат с автопересчетом при открытии. Это очень круто, поскольку используется лучшее из двух миров.

Sign up to leave a comment.