Calc: Автонастройка высоты объединённой ячейки макросом

Автор eeigor, 26 марта 2021, 21:26

0 Пользователи и 1 гость просматривают эту тему.

eeigor

Имеются очень длинные наименования.
Ситуация с "непопулярным" хранением данных на листе - объединение ячеек. Да, этого следует избегать.
Такие данные не поддаются дальнейшей обработке. Но иногда и не надо. Храним так, как и выводим на печать.
Надо сделать хранение данных компактным и всё.

Проблема в том, что после объединения ячеек такая объединённая ячейка сама не "раздвигается" по высоте, и это надо делать вручную.
Требуется макрос, который после редактирования данных в ячейке сделает примерно следующее:
- отменит объединение ячеек (данные окажутся в верхней ячейке);
- выполнит автонастройку высоты строки ячейки с данными и запомнит полученную (результирующую) высоту;
- объединит ячейки обратно и... сделает что-то, чтобы высота строки объединённых ячеек в сумме равнялась ранее сохранённому значению (как поделить высОты строк, составляющих объединённую строку, - это открытый вопрос: поровну или как-то иначе).

Возможно, есть готовое решение...
С объединёнными столбцами подобных манипуляций делать необходимости нет (объединение и редактирование данных в столбцах - более редкий случай).
Если есть такой макрос для LO Calc, просьба поделиться...

https://www.thesmallman.com/autofit-merged-cells
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Для проверки качества программы прилагаю форму Бухгалтерского баланса, взятую из системы "Консультант Плюс". :)
Владимир.

eeigor

#2
Цитата: sokol92 от 26 марта 2021, 21:44Для проверки качества программы...
Не сразу сообразил, что программу ещё надо написать  :)
Лист выглядит ужасающе!

Однако в прилагаемом файле всё более менее раздвигается (мало объединённых строк, или это объединение "поддерживается" достаточным количеством вложенных строк), "проблема" не проявляется в исходном состоянии. Возможно, при вводе данных случится то, о чём я написал в стартовой теме.

UPD:
Кстати, я назвал ситуацию с объединением ячеек "непопулярной темой". Возможно, я ошибаюсь, и это делают гораздо чаще (кроме объединения в столбцах, ведь здесь нет, как в Excel, центрирования значения по центру выделения).
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#3
В Excel макрос для подбора высоты объединенных ячеек - довольно популярная тема. Если кто-то предлагает решение, то можете протестировать качество этого решения на файле из #1. После подбора высоты лист должен "красиво" распечатываться на 2 страницах без потери символов. Результат должен быть близок к этому.

Файл из #1 выглядит "ужасающе", поскольку я взял "правильный" файл и присвоил всем строкам одинаковую высоту. Теперь программа-кандидат должна показать свое умение.
Владимир.

eeigor

@sokol92, так если тема популярная, то как здесь: есть что-нибудь готовое?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#5
Ну, стало быть, тема не пустая, а такую программу иметь в «арсенале средств» будет совсем не лишним...

Приходилось сталкиваться с задачами, когда есть автономная таблица на листе (к примеру, фрагмент расширенного плана закупок подразделения, но с пристёгнутым справа понедельным календарем хода процесса (расходы)... Надо было слева в отведённой ширине отображать длинные наименования договоров («всего и вся»). Строки в таких автономных, умеренных по количеству строк, таблицах приходилось объединять: компактно и красиво.

Никаких фильтров, сводных таблиц... только формулы и макросы. Готовая таблица, как правило, уже не растёт, но данные редактируются.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Поищите "макрос для подбора высоты объединенных ячеек". Я вряд ли что-нибудь подскажу, в Excel мы пользуемся собственным инструментом, который не публиковался.
Владимир.

economist

С моноширинными шрифтами еще можно поиграть в калькулятор и вычислить макросом высоту ячейки, надобавляв разрывов строк CHR(10) или CHR(13), и даже центрировать значения по опред. правилам. Но такой look не найдет поддержки у офисных. А с обычными офисными шрифтами (Arial/Times/Calibri) - вычислить правильно высоту и сделать красиво - не выйдет.

В тех случая, когда строк много и красота нужна - нужно, имхо, подключать сокращение/обрезку строк, тогда получится намного лучше.

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

eeigor

#8
@economist, но ведь ссылка в стартовом сообщении худо-бедно реализует задачу на VBA... Мы ничего не вычисляем сами: вычисляет Calc. У меня было что-то подобное, но не хватает времени всё переписывать, поэтому я смотрю... и обращаюсь за помощью..., чтобы "не изобретать колесо". Готового решения не нашёл.
Задача мне кажется выполнимой, раз работает функция "Optimal height" (аналог VBA Autofit). Шрифт здесь не при чём... хотя в примерах на VBA добавляют что-то extra (автоподстраивают + ещё чуть-чуть)... ну, это достигается опытным путём.

Цитата: economist от 27 марта 2021, 10:57В тех случая, когда строк много и красота нужна - нужно, имхо, подключать сокращение/обрезку строк
Строки сами "обрезаются", если выключен "Wrap text automatically". Но начало строки предваряю фасетным (human readable) кодом - к примеру индексом подразделения - в скобках. Столбец:
(Индекс) Наименование, отображаемое частично, сколько вошло...

На печати красиво, но не полно. Для внутреннего использования пойдёт.

Практикую режим "структуры" (на скриншоте) или объединение ячеек в табличном режиме. Это уже не имеет отношения к Database Ranges. Храним данные как на "бумаге".
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#9
Ну, если ничего нет, то попробую сам... но не быстро. Столбцы пока не трогаем.
Однако помощь по-прежнему приветствуется.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community