Seite 1 von 1

Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

Verfasst: Fr, 18.06.2010 17:23
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

Re: Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

Verfasst: Fr, 18.06.2010 17:50
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

Re: Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

Verfasst: Fr, 18.06.2010 18:24
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?

Re: Makro > ein bestimmtes Tabellenblatt in ein neues Dokukment

Verfasst: Fr, 18.06.2010 18:50
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