[Gelöst] Makro aus anderer Daten - Problem mit Function

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

[Gelöst] Makro aus anderer Daten - Problem mit Function

Beitrag von retuwe61 » Mo, 27.11.2017 14:02

Hallo miteinander.
Wie hier https://de.openoffice.info/viewtopic.php?f=18&t=68721 beschrieben, starte ich aus einer ToDo-Datei Makros in diversen Calc-Dokumenten.

Unter anderem sollen in einem Dokument Duplikate in Zellen enfernt werden:

Code: Alles auswählen

Sub Umbruch
oDoc = ThisComponent
oSheet = ThisComponent.getSheets.getByName ("Gesamtübersicht")
oCellCursor = oSheet.createCursor()
oCellCursor.GotoEndOfUsedArea(True)
lCol = oCellCursor.getRangeAddress.EndColumn
lRow = oCellCursor.getRangeAddress.EndRow
oRange = oSheet.getCellRangeByPosition(4,1,lCol,lRow)
oRange.clearContents (1023)
oCell = oSheet.getCellByPosition (4,1)
oCell.FormulaLocal = "=UNIQUES($Work1.E2;"" // "")" 
oRange.fillAuto(com.sun.star.sheet.FillDirection.TO_RIGHT, 1)
oRange.fillAuto(com.sun.star.sheet.FillDirection.TO_BOTTOM, 1)
aDat = oRange.getDataArray()
oRange.setDataArray(aDat)

Code: Alles auswählen

function UNIQUES(sText As String, sDelimiter As String) As String
	Dim k As Long, n as long, i as long 
	Dim aData() As String, aDataNew() as string
	Dim neu as boolean
	aData = Split(sText, sDelimiter)
	n=ubound(aData())
	Redim aDataNew(n)
	For k = 0 To n
		neu=true
		i=0
		do while aDataNew(i)<>""
			if aData(k)=aDataNew(i) then neu=false
			i=i+1
		loop
		if neu then aDataNew(i)=aData(k)
	Next
	Uniques = trim(Join(aDataNew(), sDelimiter))
End function
Starte ich die Sub direkt im Dokument ist alles in Ordnung.
Sobald ich das Makro aus der ToDo-Datei starte, werden alle Zellen mit "#WERT!" aufgefüllt.
Hat jemand eine Lösung?
Gruß
Uwe
Zuletzt geändert von retuwe61 am Di, 28.11.2017 12:14, insgesamt 1-mal geändert.
Angewandt wird LibeOffice Version 5.1.6.2

Toxitom
********
Beiträge: 3475
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Makro aus anderer Daten - Problem mit Function

Beitrag von Toxitom » Mo, 27.11.2017 14:20

Hey Uwe,

das Problem ist Deine benutzerdefinierte Funktion.

Damit das funktioniert, muss LO/AOO die auch finden - und die findet er nur, wenn Sie in der Standard-Bibliothek des Dokumentes oder in der Standardbibliothek von "Meine Makros" drin ist.

Wenn Du das Makro aus einer externen Quelle startest, wozu dann eine benutzerdefinierte Formel eintragen? Kannste doch auch direkt mit Code erledigen?

VG
Tom

Edit: Ah... ich glaube, deine Makros sind passend im Dokument? Du startest Sie nur von Extern? Da dürfte das mit den benutzerdefinierten Formaln nicht funktionieren. Nie ausprobiert, schätze aber, das ist der Fehler.
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Makro aus anderer Daten - Problem mit Function

Beitrag von retuwe61 » Mo, 27.11.2017 14:46

Hallo Tom.
Ich hatte meinen Eingangstext zwischenzeitlich korrigiert. Es handelt sich nicht um Zeilenumbrüche, die eingefügt werden sollen, sondern um das Entfernen von Duplikaten in Zellen. Und dafür habe ich keine andere Lösung.

Nachdem ich nun die Funktion aus der Bibliothek Library1 entfernt und in Standard/Module1 eingefügt habe, erhalte ich trotzdem den selben Fehler.

Muss ich evtl. im Makro der ToDo-Datei irgend etwas ändern?

Edit: Du hast Recht. Die Makros befinden sich im Dokument und werden extern gestartet.
Gruß
Uwe

Code: Alles auswählen

Sub Ausfuehren
   sURL = "/home/.../Test.ods"
   sLibName = "Library1"
   sModuleName = "Import"
   sMakroName = "Umbruch"
   
   sURL = ConvertToURL(sURL)

   Dim args(0) as new com.sun.star.beans.PropertyValue
   'args(0).Name = "Hidden"
   'args(0).Value = True
   oDocument2 = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, args)
   sScriptURI = "vnd.sun.star.script:" & sLibName & "." & sModuleName & "." & sMakroName & "?language=Basic&location=document"
   oScript = oDocument2.ScriptProvider.getScript(sScriptURI)
   REM Mit Parameter

   REM oder ohne Parameter
   oScript.invoke(Array(dummy),Array(),Array())
 End Sub
Angewandt wird LibeOffice Version 5.1.6.2

Toxitom
********
Beiträge: 3475
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Makro aus anderer Daten - Problem mit Function

Beitrag von Toxitom » Mo, 27.11.2017 17:42

Hey Uwe,

teste mal folgende Änderung:

statt

Code: Alles auswählen

oCell.FormulaLocal = "=UNIQUES($Work1.E2;"" // "")" 
nimm mal

Code: Alles auswählen

oCell.Formula = "=UNIQUES($Work1.E2;"" // "")" 
Hintergrund: Formulalokal wird ja intern auf die formula gemappt (entsprechend Deines Gebietsschemas) - und deine benutzerdefinierte Funktion steht ja nicht in der mapping-Tabelle drin. Müsste also eigentlich auch direkt gehen...
Sicher bin ich nicht, aber einen Versuch wäre es ja wert:)

VG Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Makro aus anderer Daten - Problem mit Function

Beitrag von retuwe61 » Di, 28.11.2017 06:31

Hallo Tom.
Der Fehler tritt weiterhin auf.
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Makro aus anderer Daten - Problem mit Function

Beitrag von retuwe61 » Di, 28.11.2017 12:14

Ich habe das Problem nun so gelöst, dass aus der ToDo-Datei das betreffende Calc-Dokument lediglich geöffnet wird.
Das im Calc-Dokument enthaltene Makro habe ich dem Ereignis "Dokument öffnen" mit einer Prüfroutine zugewiesen.
Danke für die Mithilfe.
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2

Benutzeravatar
balu
********
Beiträge: 3565
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: [Gelöst] Makro aus anderer Daten - Problem mit Function

Beitrag von balu » Di, 28.11.2017 13:01

Hallo Uwe,

Du hast jetzt anscheind eine Lösung gefunden.
Wenn ich dich jetzt richtig verstehe, dann öffnest Du die betreffende Datei direkt sichtbar. Zuvor hattest Du die Datei aber "versteckt" geöffnet.

Code: Alles auswählen

   Dim args(0) as new com.sun.star.beans.PropertyValue
   args(0).Name = "Hidden"
   args(0).Value = True
Nun, es kann eventuell durchaus sein, das eine Function in der versteckten Datei deshalb nicht funktioniert weil diese Datei versteckt ist. Ich hatte nämlich mal feststellen dürfen, das nicht alle Funktionalitäten in einer versteckt geöffneten Datei zur Verfügung stehen, wenn man etwas mit Basic programmiert. Und vielleicht trifft das auch auf eine Function zu, bin mir aber nicht wirklich sicher.

Und trotzdem möchte ich dir folgende Änderung mal Vorschlagen.
Anstatt die Datei versteckt zu öffnen, versuchs doch mal mit "minimiert.

Code: Alles auswählen

   Dim args(0) as new com.sun.star.beans.PropertyValue
   args(0).Name = "Minimized"
   args(0).Value = True
Keine Ahnung ob es einerseits funktioniert, und anderseits ob dir das gefallen könnte (wenn es funktioniert). es kommt aber nur auf einen Versuch drauf an.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: [Gelöst] Makro aus anderer Daten - Problem mit Function

Beitrag von retuwe61 » Di, 28.11.2017 20:51

Hallo Balu.
Ja, ich hatte beides ausprobiert. Es macht jedoch keinen Unterschied, ob die Datei sichtbar oder versteckt geöffnet wird.
Der Fehler trat in beiden Fällen auf.

Nun funktioniert es - und das ist gut so;-)
Viele Grüße
Uwe
Angewandt wird LibeOffice Version 5.1.6.2

Antworten