nach einigem Suchen bin ich inzwischen hier
https://forum.openoffice.org/en/forum/ ... 45&t=73145 fündig geworden.
Meine (teilweise funktionierende) Lösung sieht wie folgt aus:
ich habe im Verzeichnis "/home/XXXX/.config/libreoffice/4/user/Scripts/python" die Python-Datei "PyMakros.py" mit folgendem Inhalt angelegt:
Code: Alles auswählen
import re
def SearchStructure(SuchStr, text, StartPos):
hlp = re.search(SuchStr, text[StartPos:])
if hlp == None:
return "",0,0
return hlp.group(), hlp.start(), hlp.end()
Dann habe ich ein neues Colc-File angelegt und dort im Basic-Makro-Bereich folgendes hinterlegt:
(in Anlehnung an diese Quelle:
https://forum.openoffice.org/en/forum/ ... 45&t=73145)
Code: Alles auswählen
REM ***** BASIC *****
REM Keep a global reference to the ScriptProvider, since this stuff may be called many times:
Global g_MasterScriptProvider
REM Specify location of Python script providing the cell functions:
Const URL_Main = "vnd.sun.star.script:calculadorra.py$"
Const URL_Args = "?language=Python&location=user"
Function getMasterScriptProvider()
if NOT isObject(g_MasterScriptProvider) then
oMasterScriptProviderFactory = createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
g_MasterScriptProvider = oMasterScriptProviderFactory.createScriptProvider("")
endif
getMasterScriptProvider = g_MasterScriptProvider
End Function
Function PySuchenStr(sSuchen,sText, Optional StartPos)
sURL = URL_Main & "SearchStructure" & URL_Args
oMSP = getMasterScriptProvider()
oScript = oMSP.getScript(sURL)
if ismissing(StartPos) then StartPos = 1
x = oScript.invoke(Array(cstr(sSuchen),cstr(sText),StartPos),Array(),Array())
PySuchenStr = x(0)
End Function
Function PySuchenStartPos(sSuchen,sText)
sURL = URL_Main & "SearchStructure" & URL_Args
oMSP = getMasterScriptProvider()
oScript = oMSP.getScript(sURL)
if ismissing(Anzahl) then Anzahl = 1
x = oScript.invoke(Array(sSuchen,sText),Array(),Array())
PySuchenStartPos = x(1)
End Function
Function PySuchenEndPos(sSuchen,sText)
sURL = URL_Main & "SearchStructure" & URL_Args
oMSP = getMasterScriptProvider()
oScript = oMSP.getScript(sURL)
if ismissing(Anzahl) then Anzahl = 1
x = oScript.invoke(Array(sSuchen,sText),Array(),Array())
PySuchenEndPos = x(2)
End Function
In "Tabelle1.A1" steht der TestText:"aiujbionsföil 21.12.2017 öiugnbnasdug"
in "Tabelle1.A2" steht der SuchString:"[0-9]{2}\.[0-9]{2}\.[0-9]{4}"
in "Tabelle1.A4" steht die Formel: "=PYSUCHENSTR(A2;A1)" :=>> 21.12.2017
oder:
in "Tabelle1.A4" steht die Formel: "=PYSUCHENSTR("[0-9]{4}";A1)" :=>> 2017
Ob diese Funktionalität auch als Funktionsaufruf in Basic (Fehlerfrei) klappt, muß ich erst noch testen.
Jedenfalls lassen sich jetzt auch sehr komplizierte Strukturen suchen
Ich bin erst einmal zufrieden!
Gruß und schönes Wochenend ...
StePfl
Edit: jetzt habe ich noch eine kleine Anpassung im Python-Code gemacht, dass auch das "NichtFinden" abgedeckt ist