LO-Tabelle mit Makro als xlsx exportieren

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

Moderator: Moderatoren

kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

LO-Tabelle mit Makro als xlsx exportieren

Beitrag von kilix »

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!
Grüße
kilix
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: LO-Tabelle mit Makro als xlsx exportieren

Beitrag von mikeleb »

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
Gruß,
mikeleb
kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

Re: LO-Tabelle mit Makro als xlsx exportieren

Beitrag von kilix »

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!
Grüße
kilix
Karolus
********
Beiträge: 7442
Registriert: Mo, 02.01.2006 19:48

Re: LO-Tabelle mit Makro als xlsx exportieren

Beitrag von Karolus »

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)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

Re: LO-Tabelle mit Makro als xlsx exportieren

Beitrag von kilix »

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.
Grüße
kilix
Antworten