🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

getSupportedServiceNames liefert "Objektvariable nicht belegt"

Alles zur Programmierung im LibreOffice.
Antworten
Reth
Beiträge: 64
Registriert: Fr 5. Apr 2019, 23:21

getSupportedServiceNames liefert "Objektvariable nicht belegt"

Beitrag von Reth » Di 20. Aug 2019, 23:47

Hallo zusammen,

ich probiere gerade eine Kopierroutine zu schreiben, die mir anhand der Selektionen in einem Blatt alle darin enthaltenen Zeilen in ein anderes Blatt kopiert.
Dabei habe ich eine Fallunterscheidung, die je nach einzelner Zelle/Zeile, einer selektierten Range oder mehrerer selektierter Ranges unterscheidet.
Leider scheint die Prüfung auf eine selektierte Range nicht zu klappen, daher wollte ich mir mal die supported Services ausgeben lassen. Wenn ich allerdings getSupportedServiceNames() im Rahmen einer MsgBox verwende, bekomme ich immer den Fehler: "Objektvariable nicht belegt" - selbst wenn ich nur eine Zelle auswähle (bei dieser klappt die Prüfung auf supported service!). Denke mal, dass die Ausgabe anders funktionieren muss.

Das If, das auf ein Range prüft wird nicht durchlaufen - getImplementationName() im Falle der Selektion mehrerer Zellen einer Spalte innerhalb einer Range gibt aus: ScCellRangeObj

Was ist da noch falsch? Wieso läuft die Prüfung auf Range noch falsch und was bedeutet der Fehler mit der Objektvariable, wenn ich mir die Services ausgeben lassen will?
Der Debug der Services zeigt, dass bei Selektion zumindest XSheetCellRange enthalten ist, warum aber nicht auch SheetCellRange?

Dank euch schon mal!

Ciao

HIer noch der Code-Ausschnitt:

Code: Alles auswählen

	oDoc = ThisComponent
	oSel = oDoc.getCurrentSelection()
	srcSheet = odoc.currentcontroller.activesheet
	srcRangeAddress = srcSheet.getRangeAddress()
	
	If Not isNull(oSel) Then
		' only one cell selected for copying
		If oSel.supportsService("com.sun.star.sheet.SheetCell") Then
'MsgBox "One Cell selected and it contains: " & oSel.getString() & " " & oSel.CellAddress.Row
			srcRangeAddress.StartRow = oSel.CellAddress.Row
			srcRangeAddress.EndRow = oSel.CellAddress.Row
			srcSheet.copyRange(tgtRangeAddress, srcRangeAddress)
		End If
		If oSel.supportsService("com.sun.star.sheet.SheetCellrange") Then
MsgBox "One Cell Range selected"
			srcRangeAddress.StartRow = oSel.CellRangeAddress.StartRow
			srcRangeAddress.EndRow = oSel.CellRangeAddress.EndRow
			srcSheet.copyRange(tgtRangeAddress, srcRangeAddress)
		End If
		If oSel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
			MsgBox "Multiple Cell Ranges selected. Total=" & oSel.getCount()
		End If
MsgBox "ServiceNames: " & oSel.Dbg_SupportedInterfaces
	Else
		MsgBox "Current Selection is null"
	End If

Reth
Beiträge: 64
Registriert: Fr 5. Apr 2019, 23:21

Re: getSupportedServiceNames liefert "Objektvariable nicht belegt"

Beitrag von Reth » Mi 21. Aug 2019, 00:15

Ok, ein Problem schon gefixt: Hatte nen Typo in

Code: Alles auswählen

If oSel.supportsService("com.sun.star.sheet.SheetCellrange")
=> Range muss man groß schreiben!


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten