Я знаю, что в электронной таблице localc можно вручную отредактировать текст ячейки и пометить часть текста в ней жирным шрифтом, курсивом или чем-то еще.
Я хочу сделать то же самое с макросом. Я создаю итоговую строку, которая вставляется в определенную ячейку. Итоговая строка содержит несколько строк, например:
Категория1: элемент1, элемент2, элемент3
Категория2: элемент1, элемент2, ...
КатегорияN: элемент1, элемент2, ...
В ячейке может быть от ~ 4 до ~ 12 строк категорий, в зависимости от того, была ли данная категория пустой или нет.
Функция, которую я должен делать, работает, делает именно то, что я пока хочу. Но теперь я хочу выделить части ячейки "категории" следующим образом:
Категория1: элемент1, элемент2, элемент3
Категория2: элемент1, элемент2, ...
КатегорияN: элемент1, элемент2 , ...
Возможно ли это сделать в LO Basic? Я знаю, что это возможно с ручным редактированием в ячейке, но это уничтожит всю цель написания этого сценария.
Это то, что у меня есть до сих пор, в нижней части функции, которая создает итоговую строку и вставляет ее в объект ячейки (названный, как ни странно, "ячейкой"):
newline = chr(10)
cell = ThisComponent.Sheets.getByName("Summary").getCellRangeByName("Skills")
Dim next_nl as Integer
Dim next_colon as Integer
Dim TC as Object ' TextCursor object pointing into the cells text
TC = cell.createTextCursor
next_nl=1 ' start at first char of cell
While (next_nl > 0)
TC.collapseToStart
TC.gotoStart(false) ' move to start of cell
if (next_nl > 1) Then TC.goRight(next_nl, false) ' move to next_nl
TC.goRight(0,true) ' begin selection
next_colon = InStr(next_nl, cell.String, ":")
If next_colon Then
TC.goRight(next_colon, true) ' extend selection to next colon
TC.CharWeight = com.sun.star.awt.FontWeight.BOLD ' bold the selection
next_nl = InStr(next_colon, cell.String, newline) ' jump to the next LF
Else
next_nl = 0 ' no more colons to be found, finish up.'
Endif
Wend
Частично это работает. В первой строке выделена категория жирным шрифтом, а элементы - обычным текстом. Пока что идеально.
К сожалению, все от начала второй строки до примерно середины второй последней строки (да? Что? Это странно) полностью выделено жирным шрифтом. Я подозреваю, что, возможно, Instr()
не совсем правильно работает с текстом смешанного формата, неправильно подсчитывает количество символов.
Другие вещи, которые я пробовал / идеи:
Я пробовал искать CR
chr(13)
, а не LFchr(10)
, но это вообще не сработало. Я ожидал, что он будет использовать окончания строк MS-DOS CR, но он использует правильные окончания строк unix LF (даже если вы добавляете CR между строками, он преобразует их в LF). Это может быть связано с тем, что я работаю в Linux, поэтому, когда я получу эту работу, я, вероятно, должен определить рабочую среду и использовать соответствующий стиль окончания строки для Linux, Windows или чего-то еще.Я попытался переместить
Tc=cell.createTextCursor
внутри цикла while на случай, если его нужно повторно инициализировать на каждом проходе. Без разницы, результат в любом случае будет тот же.AFAICT, похоже, для курсора нет функции типа «сбросить выбор».
может быть, есть какая-то странная проблема с областью видимости переменных, но у меня почти нулевые знания об области видимости переменных в LO, поэтому не могу сказать - я новичок в макросах LO, я в основном программирую на sh, awk, perl или python, и последний Время, когда я писал что-либо на Basic, было в 1980-х.
Я даже не уверен, что приведенное выше - хороший подход к проблеме, это было первое, что показалось актуальным при поиске документации в Google. Я более чем готов начать все сначала с лучшей идеей, если это необходимо.
Я начинаю думать, что именованный диапазон «Навыки» должен состоять из одной ячейки на категорию, а не одной большой длинной строки со встроенными LF, тогда я мог бы прокручивать их по отдельности. Для этого мне потребовалось бы внести довольно существенные изменения в другие части электронной таблицы, поэтому я не хочу этого делать, если мне не нужно.
PS: Я знаю ... Я немного перфекционист. Верхний регистр названий категорий будет работать (на самом деле, это так), но это некрасиво. Выделить их полужирным шрифтом было бы намного приятнее ... и цель этой страницы сводки - для красивой презентации.