BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 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 nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten