Oh Mann, das ist ja eine stinknormale xlsx-Datei, nur dass sie auch eine Datei vbaProject.bin enthält - damit können sie die User auch verwirrt halten...
OK - kein Problem. fpspreadsheet kann das lesen und in jedes unterstützte Format umwandeln:
Code: Alles auswählen
program xlsm2csv;
{$mode objfpc}{$H+}
uses
fpstypes, fpspreadsheet, xlsxooxml, fpscsv;
var
workbook: TsWorkbook;
begin
workbook := TsWorkbook.Create;
try
workbook.ReadFromFile('test.xlsm', sfOOXML);
workbook.WriteToFile('test_xlsm.csv', sfCSV, true);
finally
workbook.Free;
end;
end.
Du musst dir vorher fpspreadsheet holen, zum Beispiel über den OnlinePackageManager von Lazarus Trunk, oder das zip-File des (noch sehr frischen) letzten Release 1.8.1 (
https://sourceforge.net/projects/lazaru ... p/download), oder die trunk-Version über svn von
https://sourceforge.net/p/lazarus-ccr/s ... readsheet/. Dann als Minimum Package laz_fpspreadsheet.lpk in die IDE laden und übersetzen. Dieses Package muss im Projekt-Manager für das obige Demo-Projekt noch als Anforderung eingetragen werden.
Das Programm liest die xlsm-Datei ein und schreibt sie als csv-Datei. Genauso kannst du z.B. in eine OpenDocument-Datei schreiben für LibreOffice, wobei die Formatierungen erhalten bleiben würden ("uses fpOpenDocument statt "uses fpcsv", und "WriteToFile('test_xlsm.ods', sfOpenDocument, true)")
Die Dokumentation findest du unter
http://wiki.lazarus.freepascal.org/FPSpreadsheet, sowie unter den dort am Ende angegebenen Links.