In andere Componente kopieren

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

Moderator: Moderatoren

inqui
**
Beiträge: 26
Registriert: Di, 09.12.2008 08:16

In andere Componente kopieren

Beitrag von inqui »

Hallo alle zusammen,

nachdem ich die Forensuche glücklos bemüht habe, versuche ich es nochmal mit einem eigenen Thema.


Einer meiner Mitarbeiter möchte in Calc nicht zusammenhängende Zellen markieren und kopieren. Ich möchte ihm nun ein Makro schreiben, mit dem er das bewerkstelligen kann, da OpenOffice das ja von Haus aus nicht bietet.

Bisher habe ich folgendes zu Stande gebracht:

Code: Alles auswählen

	dim i as integer
	dim zeile as integer
	dim spalte as integer
	dim zeilencounter as integer
	dim spaltencounter as integer
	dim slection as object
	dim bereich as object
	
	zeilencounter = 0
	spaltencounter = 0
	selection = thiscomponent.getcurrentselection()
	
	for i = 0 to selection.getcount() - 1
		bereich = selection.getbyindex(i).getrangeaddress()
		for zeile = bereich.startrow to bereich.endrow
			for spalte = bereich.startcolumn to bereich.endcolumn
				thiscomponent.sheets(1).getcellbyposition(spaltencounter,zeilencounter).string = thiscomponent.sheets(0).getcellbyposition(spalte,zeile).string
				spaltencounter = spaltencounter + 1 
			next
			zeilencounter = zeilencounter + 1
			spaltencounter = 0
		next
	next
	msgbox ("fertig")
Das funktioniert soweit auch sehr gut. Die markierten Bereiche des ersten Sheets werden ausgelesen und nacheinander untereinander in das zweite Sheet geschrieben. So weit so gut.

Nun nöchte ich aber noch erreichen, dass die Strings aus den markierten Bereichen nicht in das zweite Sheet derselben Componente, sondern in eine andere ods-Datei geschrieben werden. Diese zweite ods-Datei ist zur Laufzeit geöffnet. Es sollte also, wenn ich das richtig verstanden habe, eine zweite Componente existieren.


Mit folgendem Code ist mir zumindest gelungen, die zur Zeit geöffneten Dateien auszulesen

Code: Alles auswählen

	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	oComponents = StarDesktop.getComponents()
	oDocs = oComponents.createEnumeration()
	do while oDocs.hasMoreElements()
		oDoc = Odocs.nextElement()
		datei = odoc.geturl()
		msgbox datei
	loop
Meine Hoffnung war nun, dass "StarDesktop" eine Methode enthält, mit der ich anhand eines Indexes oder einer der URL (oder sonst etwas) eine bestimmte Componente ansprechen kann. Ähnlich der "Sheets" Methode.

In meinem jugendlich Leichtesinn habe ich mir etwas in dieser Richtung vorgestellt (ja, ich weiss, dass es so etwas nicht gibt ;-) ):

Code: Alles auswählen

StarDesktop.GetComponentByIndex(0).Sheets(0).GetCellByPosition(0,0).string
Wenn ich mich mal wieder wirr ausgedrückt habe, tut mir das Leid und ich werde es bei einem entsprechenden Hinweis nochmal versuchen.


Danke schonmal für Eure Hilfe.

Ich in für jeden Hinweis bzw. Ansatz dankbar!!



Grüße

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

Re: In andere Componente kopieren

Beitrag von Stephan »

Wenn ich mich mal wieder wirr ausgedrückt habe, tut mir das Leid


Nein, ich verstehe nur nicht wozu Du das brauchst wonach Du fragst. Dein Code funktioniert bei mir einwandfrei, so ähnlich hätte ich den auch formuliert und welches Kriterium zum Finden der Datei Du benutzen willst kannnst nur Du wissen.

Sobald Du jedenfalls in der Do-While-SChleife das richtige Dokument herausgefunden hast ist der Zugriff auf die Zelle ganz einfach odoc.Sheets(0).GetCellByPosition(0,0).string - also:

Code: Alles auswählen

'...
do while oDocs.hasMoreElements()
      oDoc = Odocs.nextElement()
      datei = odoc.geturl()
      'IF ... Then
           odoc.Sheets(0).GetCellByPosition(0,0).string
      'End If
      msgbox datei
loop
'...

Gruß
Stephan
inqui
**
Beiträge: 26
Registriert: Di, 09.12.2008 08:16

Re: In andere Componente kopieren

Beitrag von inqui »

Oh man ... was soll ich sagen - manchmal sieht man den Wald vor lauter Bäumen nicht.


Erst als ich es richtig machte funktionierte es gleich ;-)


Vielen Dank trotzdem ...



Grüße

inqui
Antworten