Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

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

Moderator: Moderatoren

sule1979
**
Beiträge: 28
Registriert: Mo, 13.03.2006 05:34

Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

Beitrag von sule1979 »

Hallo zusammen,

so langsam bin ich am Verzweifeln ob mein Vorhaben überhaupt möglich ist.

Folgender Sachverhalt.
Bei einer bestehende ODS-Datei mit mehreren Tabellenblättern (z. B. Test1, Test2, Test3 ) soll ein bestimmtes Tabellenblatt (z. B. Test2) per
Makro in eine neue ODS-Datei gespeichert werden.

Das Vorhaben habe ich schon realisiert, jedoch mit PDF. Funktioniert einwandfrei.

Unzählige Codes aus dem Internet habe ich schon durchprobiert aber es wird immer die komplette ODS-Datei inkl. aller Tabellenblätter
in eine neue ODS-Datei gespeichert.

Hat einer von euch eine Idee wie man das bewerkstelligen kann?

Danke
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

Beitrag von turtle47 »

Hi,

hier mal eine Möglichkeit einen kopierten Zellbereich in ein neues Dokument einzufügen.

Code: Alles auswählen

Sub CopyPasteRange()
Dim oSourceDoc, oSourceSheet, oSourceRange
Dim oTargetDoc, oTargetSheet, oTargetCell
Dim oDisp, octl 
Dim NoArg()
	oSourceDoc=ThisComponent
	octl = oSourcedoc.getCurrentController()
	oSourceframe = octl.getFrame()
	oSourceSheet= oSourceDoc.Sheets().getbyName("Test2")
	oSourceRange = oSourceSheet.getCellRangeByName("A1:F10")  
	oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
	octl.Select(oSourceRange)
	oDisp.executeDispatch(octl, ".uno:Copy", "", 0, NoArg()) 	
	sURL = "private:factory/scalc"
	oTargetDoc = Stardesktop.loadComponentFromURL(sURL, "_blank", 0, NoArg())
	Sheet=oTargetDoc.createInstance("com.sun.star.sheet.Spreadsheet")
	oTargetDoc.Sheets.insertNewByName("Test2",0)	
	oTargetSheet = oTargetDoc.getSheets.getbyName("Test2")
	oTargetCell = oTargetSheet.getCellByPosition(0,0)
	oTargetDoc.getCurrentController().Select(oTargetCell)
	oTargetframe = oTargetDoc.getCurrentController().getFrame()
	oDisp.executeDispatch(oTargetFrame, ".uno:Paste", "", 0, NoArg())
End Sub	
Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
sule1979
**
Beiträge: 28
Registriert: Mo, 13.03.2006 05:34

Re: Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

Beitrag von sule1979 »

Hallo Jürgen,

danke, das ist schon ein Ansatz aber nun habe ich das Problem, daß der kopierte Bereich mit Formeln hinterlegt ist,
d. h. beim Kopieren bekomme ich leere Zeilen.

Ist es möglich die Formel-Ausgabe (Ergebnis) zu kopieren?

Kennst du evtl. eine Möglichkeit mit der Funktion "storetourl" und Druckbereich zu kopieren?
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

Beitrag von turtle47 »

Hallo,
sule1979 hat geschrieben:Ist es möglich die Formel-Ausgabe (Ergebnis) zu kopieren?
Wenn Du keine Formatierungen der Zellen kopieren willst geht folgendes:

Code: Alles auswählen

Sub CopyPasteRange()
Dim oSourceDoc, oSourceSheet, oSourceRange
Dim oTargetDoc, oTargetSheet, oTargetCell
Dim NoArg()
	oSheetName = "Test2"
	copyRange = "A1:F10"
	oSourceDoc=ThisComponent
	octl = oSourcedoc.getCurrentController()
	oSourceframe = octl.getFrame()
	oSourceSheet= oSourceDoc.Sheets().getbyName(oSheetName)
	oSourceRange = oSourceSheet.getCellRangeByName(copyRange).getdataarray 
	sURL = "private:factory/scalc"
	oTargetDoc = Stardesktop.loadComponentFromURL(sURL, "_blank", 0, NoArg())
	Sheet=oTargetDoc.createInstance("com.sun.star.sheet.Spreadsheet")
	oTargetDoc.Sheets.insertNewByName(oSheetName,0)   
	oTargetSheet = oTargetDoc.getSheets.getbyName(oSheetName)
	oTargetSheet.getCellRangeByName(copyRange).setdataarray(oSourceRange)
	myView = oTargetDoc.CurrentController
	mySheet = oTargetDoc.Sheets.getByName(oSheetName)
	myView.setActiveSheet(mySheet) 
End Sub
sule1979 hat geschrieben:Kennst du evtl. eine Möglichkeit mit der Funktion "storetourl" und Druckbereich zu kopieren?
Da weis ich nicht genau was Du meinst.
Am besten machst Du einen neuen Thread mit einer genaueren Beschreibung Deines Vorhabens auf.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten