tc.Sheets.moveByName(<Name>,<Index>)

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

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

tc.Sheets.moveByName(<Name>,<Index>)

Beitrag von Stephan »

Hallo,

kann mir jemand die Logik hinter dem Index-Parameter von .moveByName erklären?

Die IDL-Referenz sagt: "the new index of the spreadsheet in the collection"

http://www.openoffice.org/api/docs/comm ... moveByName

aber die Funktion ist so, das nach quasi Index-1 verschoben wird.

Testmakro:

Code: Alles auswählen

Sub verschiebe_test()
	k1 = "Tabelle4"
	tc = Thiscomponent
	
	For i = 0 To tc.Sheets.Count-1
		If tc.Sheets().getByIndex(i).Name = k1 Then
			akt_blatt_index = i
			Exit For
		End If
	Next i

	tc.Sheets.moveByName(k1, 0)
	Wait 1000
	tc.Sheets.moveByName(k1, akt_blatt_index)
End Sub

Macht dieses Verhalten für irgendwen Sinn oder ist das schlicht ein Fehler im Programm?

Wohlgemerkt geht es mir darum das in der IDL-Referenz die Rede von 'neuem Index' ist, das aber wäre der Index nach dem Verschieben und der sollte identisch sein mit dem ursprünglichen Index, also dem Wert der im obigen Makro der Variable akt_blatt_index entspricht.

(beobachtet OOo 3.3.0 und LO 5.1.6)


Gruß
Stephan
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: tc.Sheets.moveByName(<Name>,<Index>)

Beitrag von Karolus »

Hallo

Du hast das doch selbst so in der Sub "implementiert":

vorher:
  • Tabelle1
    Tabelle2
    Tabelle3
    Tabelle4

    akt_blatt_index = 3
nach während des ersten movebyName( … , 0) wird natürlich eine neue Reihenfolge aufgebaut…:
  • Tabelle4
    Tabelle1
    Tabelle2
    Tabelle3
…und beim zweiten "moveByName" am alten Index vor Tabelle3 eingefügt.
(Genauer gesagt: zunächst anstelle Tabelle3 eingefügt, und Tabelle3 wandert dabei einen Index weiter.)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: tc.Sheets.moveByName(<Name>,<Index>)

Beitrag von Stephan »

am alten Index vor Tabelle3 eingefügt
Aber warum? Warum verhält sich OpenOffice so als sei quasi im Moment des Einfügen Tabelle4 zweimal vorhanden, nämlich:

Tabelle4
Tabelle1
Tabelle2
Tabelle4
Tabelle3

(denn nur so hat die 'Zweite' Tabelle namens "Tabelle4" kurzzeitig den Index 3)

und entfernt erst danach die ursprüngliche Tabelle4:

Tabelle1
Tabelle2
Tabelle4
Tabelle3

(dass wiederum schiene mir die neue Indexierung, nur ist eben hier der Index 2)

Siehst Du dafür eine Erklärung, zumal ich nochal auf die Beschreibung in der IDL-Referenz verweise, den warum sollte "the new Index" einen nur temporär bestehenden Index meinen?

Mir leutet das auch deswegen nicht ein, weil es ja zwei Methoden gibt (copybyname, moveByName), im Gegensatz zum Dispatcher der nur entzsprechend parametriert wird:

Code: Alles auswählen

sub verschieben2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "DocName"
args1(0).Value = "Unbenannt1"
args1(1).Name = "Index"
args1(1).Value = 3
args1(2).Name = "Copy"
args1(2).Value = false

dispatcher.executeDispatch(document, ".uno:Move", "", 0, args1())

end sub

Gruß
Stephan
Antworten