LO-Tabelle mit Makro als xlsx exportieren

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: LO-Tabelle mit Makro als xlsx exportieren

Re: LO-Tabelle mit Makro als xlsx exportieren

von kilix » Mi, 20.03.2024 09:57

Danke für eure Hilfe!
Ich habe das jetzt mit dem Makro so lösen können:
1) füge neue leere Tabelle ein
2) markiere in der Tabelle deren Inhalt ich exportieren möchte den entsprechenden Bereich (also A1:E1048576 - davor markierte ich den bereich über die Spalten daher funktionierte dann das Kopieren nicht in die Tabelle war leer, das hatte nichts mit dem Löschen von Tabellen zu tun) und kopieren diesen Bereich mit "Inhalte einfügen-Werte und Formate" in die neue leere Tabelle.
3) lösche alle nicht mehr benötigten Tabellen
4) exportiere die neue Tabelle, da keine Formeln mehr enthält, als XLSX.
5) schließe das noch offene Dokument

Das funktioniert gut und reicht für meine Bedürfnisse. Das einzige was noch etwas störend ist, ich muss das Löschen jeder Tabelle extra bestätigen.

Re: LO-Tabelle mit Makro als xlsx exportieren

von Karolus » Di, 19.03.2024 14:57

Hallo
Du köntest eine neues Dokument versteckt öffnen, die gewünschte Tabelle dort importieren, und dann als xlsx speichern und schliessen:

Code: Alles auswählen

from com.sun.star.beans import PropertyValue as PV
from pathlib import Path

def export_single_sheet(*_):
    source_doc = XSCRIPTCONTEXT.getDocument()
    source_sheetname = "Tabelle1"
    desktop = XSCRIPTCONTEXT.getDesktop()
    pv = PV()
    #neues Dokument versteckt öffnen…
    pv.Name, pv.Value = "Hidden", True
    target = desktop.loadComponentFromURL("private:factory/scalc",
                                           "_blank",
                                           0,
                                           (pv,))
    # …die gewünschte Tabelle dort importieren…
    target.Sheets.importSheet( source_doc, source_sheetname, 0)
    # … und speichern als xlsx
    pv = PV()
    pv.Name, pv.Value = "FilterName", "Calc MS Excel 2007 XML"
    uri = (Path.home() / "Documents" / "filename2.xlsx" ).as_uri()
    
    target.storeAsURL(uri, (pv,))
    target.close(True)
ist leider python 8)

Re: LO-Tabelle mit Makro als xlsx exportieren

von kilix » Di, 19.03.2024 11:50

Hallo mikeleb,
danke, das hilft mir sehr. Ich habe aber nun ein weiteres Problem: ich habe den ganz oben eingefügten Makro nun auf das richtige Exportfilter korrigiert. Das Speichern als XLSX funktioniert damit. Ich habe aber in dem LO-Dokument weitere Tabelle (zum Einlesen von Daten aus einer Datenbank, eine Berechnungstabelle und eine formatierte Tabelle). Um eine Tabelle ohne Formeln ausgeben zu können kopiere ich die benötigten Spalten der formatierten Tabelle mit "kopieren-Inhalte einfügen-Werte und Formatierungen in eine neu eingefügte Tabelle. Diese neue möchte ich als XLSX exportieren. Mit dem genannten Makro werden aber alle Tabellen kopiert.
Deshalb lösche ich alle Tabelle, bis auf die einen, mit einem mitgeschriebenen Makro. Leider ist danach die neue Tabelle die ich exportieren will leer bis auf die Überschrift (wenn ich den Vorgang manuell mache bleibt der Inhalt erhalten).
Daher meine Fragen:
1) kann ich die eine Tabelle allein exportieren?
oder
2) wie kann ich die überzähligen Tabellen löschen, ohne dass die zu exportierende danach leer ist?

Edit: wie ich durch Tests herausgefunden habe ist die zu exportierende Tabelle leer weil die Funktion "kopieren" im aufgezeichneten Makro nicht durchführt werden kann.

Danke für Hilfe!

Re: LO-Tabelle mit Makro als xlsx exportieren

von mikeleb » Mo, 18.03.2024 22:53

Hallo,
der Exportfilter lautet
"Calc MS Excel 2007 XML"
siehe hier:
https://help.libreoffice.org/latest/de/ ... lters.html
Ein kurzes Speichermakro würde dann so lauten:

Code: Alles auswählen

Sub Speichern

	Dim args(0) as New com.sun.star.beans.PropertyValue
	sUrl= converttourl("c:/test.xlsx")
	args(0).Name = "FilterName"
	args(0).Value = "Calc MS Excel 2007 XML"
	
	ThisComponent.storeToUrl(sUrl,args)
End Sub

LO-Tabelle mit Makro als xlsx exportieren

von kilix » Mo, 18.03.2024 21:30

Hallo,
nach langer zeit habe ich wieder eine Frage: ich exportiere bereits eine LO-Tabell mit Hilfe eines Makros (danke mikeleb) als PDF-Dokument. Nun möchte ich diese Tabelle als XLSX exportieren. Dazu habe ich das Makro für PDF abgeändert:

Code: Alles auswählen

sub XLSX_Ausgabe
	Datum=year(Date) & right("0"&Month(Date),2) & right("0"&Day(Date),2)
	odoc=ThisComponent
	Dim arg(2) as new com.sun.star.beans.PropertyValue
	arg(0).Name = "URL"
	arg(0).Value = Left(odoc.url, Len(odoc.url) - 4)
	arg(0).value = Replace (arg(0).value, "Dokumente", "XLSX_Ausgabe")  + "_" + Datum + ".xlsx"
	arg(1).Name = "FilterName"
	arg(1).Value = "calc_xlsx_Export"	'<=== hier habe ich auf gut Glück pdf auf xlsx geändert
	Dim aFilterData(0) as new com.sun.star.beans.PropertyValue
	aFilterData(0).Name = "Selection"
	aFilterData(0).Value = ThisComponent.Sheets(0) 'die Zählung der Tabellen beginnt bei 0
	arg(2).Name = "FilterData"
	arg(2).Value = aFilterData()
	ThisComponent.storeToUrl(arg(0).value,arg())    '<=== hier wird Laufzehler gemeldet (siehe unten)
'	Fertigmeldung
	Datei =  ConvertFromUrl(right(arg(0).value,len(arg(0).value)-8))
	msgbox "Die XLSX-Datei:" + chr(13) + Datei + chr(13) +"ist fertig"
end sub
Fehlermeldung:
Message: SfxBaseModel::impl_store <file:///D:/SCHLARAFFIA%20RApp/RApp-Berichte/XLSX_Ausgabe/DiplCorps_20240318.xlsx> failed: 0x81a(Error Area:Io Class:Parameter Code:26).

Danke für eure Hilfe!

Nach oben