Tabellenblatt in neue Calc Datei kopieren

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

Moderator: Moderatoren

SCAL58
Beiträge: 1
Registriert: Di, 09.03.2021 19:52

Tabellenblatt in neue Calc Datei kopieren

Beitrag von SCAL58 »

Guten Abend Forum,

Ausgangssituation:
  • verwendet wird eine LibreOffice Calc-Datei mit mehreren Tabellenblättern
  • per Button soll eine Kopie nur von einem bestimmten Tabellenblatt erstellt werden und in eine neue Calc-Datei gepackt werden
  • Ich habe mich an einem Makro aus dem Internet orientiert: ursprünglich hat dieses Makro eine PDF-Datei von einem bestimmten Bereich erstellt (funktioniert problemlos)
  • meine Idee war, dass ich dachte ich könnte das Gleiche für eine .ods Datei machen -> erstelle eine neue Calc-Datei .ods von einem bestimmten Bereich aus einem Tabellenblatt
  • es funktioniert leider nur bedingt...es wird zwar eine Datei erzeugt aber mit allen Tabellenblätter aus der ursprünglichen Calc-Datei - ich würde gerne aber nur ein bestimmtes Tabellenblatt übergeben

Ziel: ein bestimmter Bereich bzw. Tabellenblatt wird kopiert und in eine neue Calc-Datei .ods gepackt

mein angepasstes Makro:

Code: Alles auswählen

Sub SaveRange

   dim document as object
   dim dispatcher as object
   
   document = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   
   oSheet =  ThisComponent.CurrentController.getActiveSheet()
   oCellRange = oSheet.getCellRangeByName("A1:K50")
   
   dim aFilterData(0) as new com.sun.star.beans.PropertyValue
   aFilterData(0).Name = "Selection"
   aFilterData(0).Value = oCellRange
 
   dim args1(1) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "URL"
   args1(0).Value = "file:///C:/Test_Kopie.ods"  
   args1(1).Name = "FilterData"
   args1(1).Value = aFilterData()
 
   dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
   
End Sub
Es gibt zwar viele ähnliche Beiträge aber ich konnte leider nicht fündig werden, was mich zu meiner Lösung führt (meine Makro- und Programmierkenntnisse sind auch nicht die Besten).

Danke im Voraus für Tipps & Anpassungen!
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Tabellenblatt in neue Calc Datei kopieren

Beitrag von Stephan »

Ich würde das im Zweifel so machen:

Code: Alles auswählen

Sub Main
	dim props(0) As New com.sun.star.beans.PropertyValue
	props(0).Name = "Hidden"
	props(0).Value = True
	
	oSheetName =  ThisComponent.CurrentController.getActiveSheet().Name
	
	ThisComponent.StoreToURL("file:///D:/Test_Kopie.ods", Array())
	
	akt = StarDesktop.loadComponentFromURL("file:///D:/Test_Kopie.ods", "_blank", 0, props())
	For i = akt.Sheets.Count-1 to 0 Step -1
		If akt.Sheets().getByIndex(i).Name <> oSheetName Then
			akt.Sheets().removeByName(akt.Sheets().getByIndex(i).Name)
		End If
	Next i
	akt.store()
	akt.close(True)
End Sub

Warum "im Zweifel"?
Weil das so Kopieren kompletter Tabellenblätter ("komplett" hinsichtlich aller denkbaren Inhalte, wie Grafiken, Diagramme, Schaltflächen, ...) völlig unabhängig von der konkreten LO- (und OO-) Version funktioniert.


Gruß
Stephan
Antworten