[gelöst] Bereich kopieren von Dokument zu Dokument

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

Moderator: Moderatoren

Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

[gelöst] Bereich kopieren von Dokument zu Dokument

Beitrag von sven-my »

Hallo Experten,

seit Samstag beiße ich mir die Zähne an diesem Makro, irgendwann mal hier im Forum gefunden, aus:

Code: Alles auswählen

Sub Daten_uebertragen
	odoc = thiscomponent
	SheetQuelle = odoc.sheets().getByName("kopieren") 'Quell-tabelle
	ocursorQuelle = SheetQuelle.createcursor
	ocursorQuelle.gotoEndofusedArea(false)
	LastrowQuelle = ocursorQuelle.getrangeaddress.endrow
'msgbox LastrowQuelle
	oRange1 = SheetQuelle.getCellRangeByPosition(0,1,13,LastRowQuelle)
	oData() = oRange1.getDataArray()
	rowdiff = LastrowQuelle
	
	Dim oDocSrc1 as Object
	dim p(0) as new com.sun.star.beans.PropertyValue
	p(0).Name = "Hidden"
	p(0).Value = true
	oUrlSrc  = "file:///E:/OpenOffice/Unbenannt_1.ods" 						'Zieldokument
	oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, p())	'Datei im Hintergrund öffnen
	
'	SheetZiel = oDocSrc1.sheets().getByName("neu")	'Fehler : com.sun.star.container.NoSuchElement.Exception
	SheetZiel = oDocSrc1.sheets(0)					'Ziel-tabelle
	ocursorZiel = SheetZiel.createcursor
	ocursorZiel.gotoEndofusedArea(false)
	LastrowZiel = ocursorZiel.getrangeaddress.endrow 'Fehler: Falscher Wert: Tabelle A1:N10 Daten, ausgegeben wird '0'
	
	LastrowZiel = LastrowZiel + 1
	
msgbox LastrowZiel

msgbox rowdiff
'exit sub
	oRange2 = SheetZiel.getCellRangeByPosition(0,LastRowZiel,13,LastRowZiel + rowdiff)
	oData() = oRange2.setDataArray(oData)		'Fehler: com.sun.star.uno.RuntimeException
	
	oDocSrc1.store 'Zieldatei speichern
	oDocSrc1.Close(True)'Zieldatei schliessen
	Msgbox "Die Datenübertragung ist abgeschlossen"

End Sub
Folgende Fehler treten auf:
1. das Tabellenblatt im Ziel-Dokument läßt sich nicht mit Namen ansprechen
2. stellt sich mir die Frage, ob das Ziel-Dokument überhaupt angesprochen wird, denn
3. bekomme ich eine völlig falsche Angabe zur letzten Zeile
4. selbst wenn ich z.B. A1:N3 kopieren will (ohne zuvor die letze Zeile zu ermitteln) gibt es die Fehlermeldung com.sun.star.uno.RuntimeException in der Zeile oData() = oRange2.setDataArray(oData)

Fehlermeldungen und -beschreibungen habe ich teilweise in den Code reingeschrieben

Als die Fehlermeldung zum ersten Mal auftauchte, habe ich festgestellt, daß Quell- und Zielbereich unterschiedliche Größe hatten.
Wenn ich aber von A1:N3 nach A1:N3 kopieren will kann das ja nicht sein.

Ich bin nicht sehr fit in Basic, also bitte bei evtl. Antworten nicht zu viel Wissen voraussetzen.

gruß
sven-my
Zuletzt geändert von sven-my am Mo, 08.10.2012 19:14, insgesamt 1-mal geändert.
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von Karolus »

Hallo

oRange2 = SheetZiel.getCellRangeByPosition(0,LastRowZiel,13,LastRowZiel + rowdiff -1 )

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von sven-my »

Hallo Karolus,

ändert erstmal auch nichts - wie ich schrieb, bin ich mir nicht sicher, ob das Zieldokument überhaupt richtig angesprochen wird.

Trotzdem hab' ich's ausprobiert - gleiche Fehlermeldung

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von Karolus »

Hallo
Dann weiss ich auch nicht weiter, - hier läuft das mit der Korrektur und mit angepassten Pfaden.
versuchs nochmal mit ...."Hidden" = false

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von sven-my »

Hallo Karolus,

wenn ich Hidden auf false stelle, wird
1. bei nicht geöffneten 'Unbenannt_1.ods' dieses Dokument schreibgeschützt geöffnet.

2. bei geöffneten 'Unbenannt_1.ods' noch ein zweites 'Unbenannt_1.ods' ebenfalls schreibgeschützt geöffnet.

Fehlermeldung bleibt - wegen schreibgeschützt ???

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von Karolus »

sven-my hat geschrieben:Hallo Karolus,

wenn ich Hidden auf false stelle, wird
1. bei nicht geöffneten 'Unbenannt_1.ods' dieses Dokument schreibgeschützt geöffnet.

2. bei geöffneten 'Unbenannt_1.ods' noch ein zweites 'Unbenannt_1.ods' ebenfalls schreibgeschützt geöffnet.

Fehlermeldung bleibt - wegen schreibgeschützt ???

gruß
sven-my
Da vermute ich mal zu 1. ist bereits 'Unbenannt_1.ods' versteckt geöffnet - du solltest daher mal office komplett abschiessen und neu starten....

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von sven-my »

Hallo Karolus,

das Problem:

Code: Alles auswählen

   oData() = oRange2.setDataArray(oData)      'Fehler: com.sun.star.uno.RuntimeException
scheint nach Deinem letzten Tip gelöst ! Klasse !

bleibt noch dieses:

Code: Alles auswählen

'   SheetZiel = oDocSrc1.sheets().getByName("neu")   'Fehler : com.sun.star.container.NoSuchElement.Exception
   SheetZiel = oDocSrc1.sheets(0)               'Ziel-tabelle
denn die Daten müssen monatlich in ein anderes Tabellenblatt.
Wenn ich nun das entsprechendende Blatt von Hand zu '0' machen muß, kann ich besser die Daten auch "von Hand" rüberschaufeln.

Das "neu" wäre natürlich durch eine Variable zu ersetzen, aber was soll ich mir darüber Gedanken machen, wenn so schon nicht funktioniert.

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von Karolus »

Hallo
Natürlich funktioniert das auch via ..getByName(....)
aber offensichtlich gibts in deinem Zieldokument keine Tabelle namens "neu"

http://www.dannenhoefer.de/faqstarbasic ... l#Zweig205

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von balu »

Hallo sven,

ich krieg deinen Code einfach nicht ans laufen. Das soll aber nichts heißen, da ich nicht das Wissen wie Karo habe. Aber dennoch ist mir da ein Fehler im Code aufgefallen. Richtig müsste es nämlich wie folgt lauten.

Code: Alles auswählen

oRange2 = SheetZiel.getCellRangeByPosition(0,LastRowZiel,13,LastRowZiel + rowdiff)
oRange2.setDataArray(oData)      'Fehler: com.sun.star.uno.RuntimeException
Das hier

Code: Alles auswählen

oData() = oRange2.setDataArray(oData)
ist in diesem Falle beim Array kopieren nicht korrekt. Da ich selber mit der 2-Dateien-kopiertechnik des öfteren arbeite, ist mir das aufgefallen. Jedoch gehe ich dabei einen ganz anderen Weg als Du, und zwar;
ERST die 2.Datei Hidden öffnen
DANN erst mit getDataArray und setDataArray die Daten kopieren.
Ein weiterer Unterschied zwischen Dir und mir ist, ich arbeite mit festen Datenbereichen.

Meine Empfehlung an dich: Mach es so wie ich. Erst öffnen, dann die Datenbereiche feststellen und dann kopieren. Vielleicht klappts ja dann. Das habe ich jetzt aber mit deinem Code nicht probiert.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Bereich kopieren von Dokument zu Dokument

Beitrag von sven-my »

Hallo Karolus,

das letzte Problem ist auch gelöst, es hing mit dem 'hidden' geöffneten Dokument zusammen, aber dann hab' ich noch einen Fehler eingebaut.

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: [gelöst] Bereich kopieren von Dokument zu Dokument

Beitrag von sven-my »

Hallo Karolus,

es gab ein Tabellenblatt mit neu - aber 'neu ' und nicht 'neu'; habe ich aber erst gemerkt, als ich es in 'Okt' umbenennen wollte, bzw. habe.

@ balu,

bitte ließ noch mal den letzten Satz im Eingangsbeitrag - Du setzt zuviel Wissen bei mir voraus.
Ich bin prima im Erkennen, ob ich einen CODE für meine Zweck zurechtstricken kann, hab' auch etwas Ahnung in den Jahren angesammelt, aber Betonung liegt auf >etwas<.

So, wie der code im Eingangsbeitrag steht, plus der Korrektur von Karolus funktioniert's, wie ich es haben möcht.

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Antworten