Seite 1 von 1

[gelöst] Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 13:45
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

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 14:48
von Karolus
Hallo

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

Karolus

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 15:10
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

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 15:29
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

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 16:54
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

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 18:10
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

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 18:47
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

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 19:04
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

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 19:12
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

Re: Bereich kopieren von Dokument zu Dokument

Verfasst: Mo, 08.10.2012 19:14
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

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

Verfasst: Mo, 08.10.2012 19:31
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