Hallo,
vielleicht hilft Dir das hier:
sub ExportToCSV
dim sDocURL as string
dim sDocPath as string
dim sDocName as string
dim sDocExt as string
dim sBackURL as string
dim oDoc as object
dim oDisp as object
dim oFrame as object
if (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) then
GlobalScope.BasicLibraries.LoadLibrary("Tools")
end if
oDoc = Thiscomponent
if oDoc.hasLocation() then
'--------------------------------------------------
' Save the file, if it has been opened from storage
'--------------------------------------------------
oDoc.store()
else
'-------------------------------------------
' Show a save dialog if it is a new document
'-------------------------------------------
oFrame = ThisComponent.CurrentController.Frame
oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
oDisp.executeDispatch(oFrame, ".uno:Save", "", 0, Array())
end if
if oDoc.hasLocation() then
sDocURL = oDoc.getURL()
sDocPath = DirectoryNameoutofPath(sDocURL, "/")
sDocName = GetFileNameWithoutExtension(sDocURL, "/")
sDocExt = GetFileNameExtension(sDocURL, "/")
'--------------------------------------------------------------
' Create CSV only, if working on a Calc Document in ODF Format
'--------------------------------------------------------------
if sDocExt = "ods" then
sBackURL = sDocPath & "/" & sDocName & ".csv"
dim sArgs(2) as new com.sun.star.beans.PropertyValue
sArgs(0).Name = "FilterName"
sArgs(0).Value = "Text - txt - csv (StarCalc)"
sArgs(1).Name = "FilterOptions"
sArgs(1).Value = "59,34,76,1,,0,false,true,true,false,false"
oDoc.storeToURL(sBackURL, sArgs())
end if
end if
end sub
Anmerkungen
[1] Der erste Zweig in if oDoc.hasLocation
stellt lediglich sicher, dass Änderungen an der Datei auch gespeichert werden, falls es sich um eine bestehende Datei handelt
[2] Der else
Zweig erzwing eine Sicherung, falls es sich um eine neue Datei handelt, die noch nie gesichert wurde.
[3] Es wird eine CSV Datei erzeugt, die denselben Name hat, wie die geöffnete Datei
[4] Es wird die jeweils aktive Tabelle als .csv
exportiert und ein eventuell vorhandener Export einer anderen Tabelle wird überschrieben. Wenn der Dateiname des Exports noch um Tabellennummer/Tabellenname erweitert werden soll, bitte einen entsprechenden Kommentar hinterlassen.
[5] Die CSV Datei wird im gleichen Verzeichnis, in dem die .ods
Datei speichert ist, erzeugt.
[6] Es bleibt die .ods
Datei geöffnet
Getested mit LibreOffice
Version: 7.0.5.2, Build ID: 64390860c6cd0aca4beafafcfd84613dd9dfb63a
CPU threads: 8; OS: Linux 5.3; UI render: GL; VCL: kf5
Locale: de-DE (de_DE.UTF-8); UI: de-DE, Calc: threaded
Update - Erweiterte Makroversion
Siehe folgendes erweiterte Makro: ExportCSVMakro-Erweitert.txt.odt - Die Erweiterung .odt
bitte entfernen. Die Datei ist eine reine Textdatei und hat diese Endung nur erhalten, um sie hier mit einer erlaubten Erweiterung hochladen zu können.
Anmerkungen
[1] Diese Version exportiert alle Tabellen oder die mit Nummer übergebene Tabelle (Diese Verwendung zeigt beispielhaft die zusätzlich Subroutine ExportSheet12
[2] Es wird dem originalen Dateinamen noch ein -sheet-#
hinzugefügt, um die verschiedenen Tabellen zu im exportierten CSV Namen unterscheiden zu können. Will man das nicht für den Fall, dass eine Tabllennummer angegeben wurde, könnten man unmittelbar nach der Zeile sBackURL=...
ein
if iStart = iStop then
sBackURL = sDocPath & "/" & sDocName & ".csv"
end fi
einfügen.
[3] Dieses Makro wurde nun gesteted unter Windows mit
Version: 7.0.5.2 (x64), Build ID: 64390860c6cd0aca4beafafcfd84613dd9dfb63a
CPU threads: 1; OS: Windows 10.0 Build 19042; UI render: Skia/Raster; VCL: win
Locale: en-US (en_DE); UI: en-US, Calc: threaded