LibreOfficeライターを使用すると、テキスト内に注釈(注釈/コメント)を挿入できます。PythonマクロからLibreOfficeライターアノテーションの内容を読み取る方法
私の問題は、ライン特有の注釈の内容にアクセスする方法が見つからないということです。
次のPythonコードは、選択/強調表示されたテキストを探して、フォーマットされたタイムコード(例えば01:10:23または11:10)以外のすべてを取り除き、秒に変換します。
テキストが選択されていない場合、現在の行全体が選択され、タイムコードの検索が試みられます。ただし、タイムコードは注釈に含まれる可能性があります。
私はドキュメント内のすべての注釈のリストを取得できましたが、コードの先頭にコメントアウトされていますが、私にとっては役に立たないものです。
私は、現在の行が、その内容にアクセスする方法)注釈または
Bを持っているかどうかを
A)の占いの方法を発見することができませんでした。
誰でもこれを達成できれば、私はどんな指摘にも感謝します。
def fs2_GoToTimestamp(*args):
#get the doc from the scripting context which is made available to all scripts
desktop = XSCRIPTCONTEXT.getDesktop()
model = desktop.getCurrentComponent()
oSelected = model.getCurrentSelection()
#access annotations for the whole document
# oEnum = model.getTextFields().createEnumeration()
# cursor = desktop.getCurrentComponent().getCurrentController().getViewCursor()
# while oEnum.hasMoreElements():
# oField = oEnum.nextElement()
# cursor.gotoRange(oField,False)
# print (cursor.getPosition())
# if oField.supportsService('com.sun.star.text.TextField.Annotation'):
# print (oField.Content)
# x = oField.getAnchor()
# print (dir(x))
oText = ""
try: #Grab the text selected/highlighted
oSel = oSelected.getByIndex(0)
oText= oSel.getString()
except:pass
try:
if oText == "": # Nothing selected grab the whole line
cursor = desktop.getCurrentComponent().getCurrentController().getViewCursor()
cursor.gotoStartOfLine(False) #move cursor to start without selecting (False)
cursor.gotoEndOfLine(True) #now move cursor to end of line selecting all (True)
oSelected = model.getCurrentSelection()
oSel = oSelected.getByIndex(0)
oText= oSel.getString()
# Deselect line to avoid inadvertently deleting it on next keystroke
cursor.gotoStartOfLine(False)
except:pass
time = str(oText)
valid_chars=(':')
time = ''.join(char for char in time if char in valid_chars)
if time.count(":") == 1:
oM, oS = time.split(":")
oH = "00"
elif time.count(":") == 2:
oH,oM,oS = time.split(":")
else:
return None
if len(oS) != 2:
oS=oS[:2]
try:
secs = int(oS)
secs = secs + int(oM) * 60
secs = secs + int(oH) *3600
except:
return None
seek_instruction = 'seek'+str(secs)+'\n'
#Now do something with the seek instruction
注釈を列挙して[getAnchorを()](https://www.openoffice.org/api/docs/common/ref/com/sun/star/text/XTextContent.html#getAnchor)を使用しそれぞれがどこに位置しているかを調べる。 https://wiki.openoffice.org/wiki/Documentation/DevGuide/Text/Editing_Text#Text_Contents_Other_Than_Stringsを参照してください。 –
返事をありがとう。おそらくそれは私ですが、oFieldまたはoField.getAnchor()から返されたメソッドを見つけることができません。oEnumを列挙すると、文書内の注釈の位置がわかります。カーソルを作成して 'gotoRange(oField、False) 'しようとすると、そのようなインタフェースがないと主張します。私はあなたの目に見えないエラーを見いだすことができるように、私の意図的でない試みを質問に追加しました。私はAPIドキュメントに苦労することを認めます、それは宝石で泳ぐようなものです –