Как в макросе выровнять текст в ячейке по центру?

Автор Vlad55515, 18 октября 2019, 10:17

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

Vlad55515

Как в макросе выровнять текст в ячейке по центру? Хотелось бы не банальной записью макроса

economist

#1
LibreOffice 6.3 неплохо поддерживает макросы VBA. Макросы на VBA крайне лаконичны, в Интернете полно примеров. В Calc cработает даже самый простейший типа такого (см. вложение):


Option VBASupport 1
Sub ТекущуюЯчейку_ПоЦентру()
Selection.HorizontalAlignment = xlCenter
End Sub


Вместо Selection можно указывать диапазон в [ ], например так:
[B3:B10].HorizontalAlignment = xlCenter
[ИМЯ].HorizontalAlignment = xlCenter
Пить не буду коньяка - читану Питоньяка!

rami

Выравнивание текста в ячейке:
Sub Main
Dim oSheet, oCell
oSheet = ThisComponent.Sheets(0)   'первый лист
oCell = oSheet.getCellRangeByName("A1")
'по горизонтали
oCell.HoriJustify = com.sun.star.table.CellHoriJustify.CENTER   'другие: STANDARD, LEFT, CENTER, RIGHT, BLOCK, REPEAT
'по вертикали
oCell.VertJustify = com.sun.star.table.CellHoriJustify.CENTER   'другие: STANDARD, TOP, CENTER, BOTTOM
End Sub

Illar

Добрый день! Замучался с поисковиками в попытках найти ответ на возможность выравнивания текста в ячейке текстовой таблицы Writer. Везде отсылки к электронным таблицам Calc или руководствам по работе с офисным пакетом. Помогите с кодом, пожалуйста! Какой метод рабочий? ???

economist

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

В поисковиках есть ИИ-режим, который подсказывает следующий вопрос. И в котором можно ограничить область поиска (исключить Calc). ИИ, кстати, прочел книги Питоньяка.
Пить не буду коньяка - читану Питоньяка!

Illar

Цитата: economist от  4 апреля 2026, 09:56В книгах Питоньяка на русском и английском все есть. Читать их за вас никто не будет. Но если тема макросов неизбежна - книги придется прочитать или хотя бы просмотреть.

В поисковиках есть ИИ-режим, который подсказывает следующий вопрос. И в котором можно ограничить область поиска (исключить Calc). ИИ, кстати, прочел книги Питоньяка.
Зря Вы так. В книгах Питоньяка я не нашёл очевидного ответа на вопрос, как осуществить выравнивание текста в ячейке текстовой таблицы документа Writer. Размещать здесь листинги длительной переписки с ИИ в поисках ответа на данный вопрос с внушительным списком ошибочных версий кода будет некорректно для этого форума. Я не смог найти решение и всего лишь обратился за помощью к известному мне ресурсу.
Касаемо ИИ, он попытался сперва применить методы Calc, затем через стиль ячейки и через прямое форматирование абзаца. Все попытки оказались неудачными.

bigor

#6
Цитата: Illar от  4 апреля 2026, 10:31как осуществить выравнивание текста в ячейке текстовой таблицы документа Writer
Немного Питоньяка и изучения свойств ячейки текстовой таблицы получился такой вариант
oTable.getCellByName("A5").text.start.ParaAdjust=3
Поддержать наш форум можно здесь

Illar

Цитата: bigor от  4 апреля 2026, 21:30oTable.getCellByName("A5").text.start.ParaAdjust=3
Благодарю! Всё действительно оказалось намного проще. :)

economist

#8
Ну или менее загадочно, зато наглядно почему VBA с его константами вида xlCenter и wdAlignParagraphCenter взлетел,
а LO с его com.sun.star.style.ParagraphAdjust.CENTER пока что нет:
   
Sub Main
oTable = ThisComponent.TextTables(0)
oTable.getCellByName("A1").text.start.ParaAdjust = com.sun.star.style.ParagraphAdjust.CENTER
' А также LEFT, RIGHT, CENTER, BLOCK - по ширине, STRETCH - с разгоном последней строки
End sub
Пить не буду коньяка - читану Питоньяка!

sokol92

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