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

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

Moderator: Moderatoren

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

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

Beitrag von Stephan » Fr, 09.06.2017 15:04

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: 7063
Registriert: Mo, 02.01.2006 19:48
Kontaktdaten:

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

Beitrag von Karolus » Fr, 09.06.2017 15:36

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.)
AOO4, LO4.3, LO4.4 LinuxMint17.2

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

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

Beitrag von Stephan » Fr, 09.06.2017 16:12

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