我知道可以在本地電子表格中手動編輯單元格文本並將其中的某些文本標記爲粗體,斜體或其他內容。在Libreoffice Calc Basic中將單元格文本的部分標記爲粗體?
我想用宏做同樣的事情。我構建了一個插入到特定單元格的摘要字符串。摘要字符串包含多個線,如:
組別:項目1,項目2,項目3
類別2:項目1,項目2,...
CategoryN:項目1,項目2, ...
根據給定類別是否爲空,單元格中可能存在從〜4到〜12的任何類別行。
我必須這樣做的功能正在工作,到目前爲止我確實需要做的。但現在我要加粗這樣的單元格的 「類別」 部分:
組別:項目1,項目2,項目3
類別2:項目1,項目2,.. 。
CategoryN:項目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或其他類型的結束風格。我試過在while循環中移動
Tc=cell.createTextCursor
以防萬一它需要在每次傳遞時重新初始化。兩種方式沒有區別,結果相同。AFAICT,似乎沒有針對遊標的「重置選擇」類型函數。
也許有一些奇怪的變量範圍問題,但我對LO中的變量範圍幾乎沒有任何知識,所以不能說 - 我對LO宏非常陌生,我主要用sh,awk,perl編程或python,以及我上次在Basic中寫入任何東西的時間早在20世紀80年代。
我甚至不確定上述問題是否是一個很好的解決方法,它只是在搜索文檔時看起來相關的第一件事。如果有必要,我更願意從一個更好的主意開始。
我開始認爲名爲範圍的「技能」應該是每個類別一個單元,而不是一個嵌入了LF的大長字符串,然後我可以單獨循環。這樣做會要求我對電子表格的其他部分進行相當大的改動,所以除非必須,否則我不想這樣做。
PS:我知道......我是一個完美主義者。將類別名稱大寫會起作用(事實上,它的確如此),但有點難看。將它們加粗會更好......這個Summary頁面的目的是爲了漂亮的演示。
尊敬的匿名downvoter - 我知道這個Q是關於恰好嵌入到電子表格中的編程語言。但它仍然是一個編程問題,而不是應用程序使用問題,它不是單元格公式或更適合超級用戶或幫助臺的其他應用程序問題。它是編程,即使它是基本的。在電子表格中。在SO上有更多關於「玩具」式語言的其他許多問題。 – cas
也許它是downvoted,因爲這是一個很長的問題?儘管我看起來很好。細節很有幫助。 –
是的,我更傾向於回答問題,如果提問者表明他們試圖自己弄清楚並提供有用的細節,比如他們想要做的事情(如果是XY問題,或者更糟糕的是,「WTF ?「)。 – cas