.XLSM in CSV umwandeln
-
- Beiträge: 38
- Registriert: So 15. Mai 2016, 13:33
.XLSM in CSV umwandeln
Hallo liebe Forenmitglieder,
kurze Erläuterung zu meinem Problem. Ich erhalte eine .XLSM als E-Mail im Anhang.
Diese wollte ich per VBA-Skript bei Erhalt der Nachricht in ein bestimmten Ordner kopieren!
Jetzt zu meinem Problem. Ist es möglich mit Lazarus Powershell Befehle auszuführen?
Kann man evtl. in Lazarus direkt .XLSM in CSV umwandeln? Hat damit jemand schon Erfahrung gemacht?
Bis jetzt habe ich es leider nur mit einer .XLSX Datei hinbekommen (in Powershell)..
Über jegliche Denkanstöße wäre ich sehr dankbar.
Gruß
dash_develop
kurze Erläuterung zu meinem Problem. Ich erhalte eine .XLSM als E-Mail im Anhang.
Diese wollte ich per VBA-Skript bei Erhalt der Nachricht in ein bestimmten Ordner kopieren!
Jetzt zu meinem Problem. Ist es möglich mit Lazarus Powershell Befehle auszuführen?
Kann man evtl. in Lazarus direkt .XLSM in CSV umwandeln? Hat damit jemand schon Erfahrung gemacht?
Bis jetzt habe ich es leider nur mit einer .XLSX Datei hinbekommen (in Powershell)..
Über jegliche Denkanstöße wäre ich sehr dankbar.
Gruß
dash_develop
Re: .XLSM in CSV umwandeln
Jetzt gibt mir mal bitte Nachhilfe: XLSM? Ist das eine Datendatei so wie XLSX oder eine Makro-Datei? XLSX könntest du mit fpspreadsheet direkt mit fpc laden und als csv (oder anderes Format) speichern, Makros werden allerdings nicht unterstützt.
-
- Beiträge: 38
- Registriert: So 15. Mai 2016, 13:33
Re: .XLSM in CSV umwandeln
.XLSM ist eine Makro-Datei... Gibt es eine andere Möglichkeit die Makro-Datei einzulesen oder als CSV zu speichern?
Oder muss ich die vorher erstmal in eine XLSX umwandeln und dann erst weiter damit arbeiten?
Oder muss ich die vorher erstmal in eine XLSX umwandeln und dann erst weiter damit arbeiten?
Re: .XLSM in CSV umwandeln
Das verstehe ich jetzt nicht: wenn es eine Makro-Datei ist, dann enthält sie Makros, also keine Daten, und ein Abspeichern als CSV macht dann m.E. keinen Sinn.
Hast du eine unwichtige xlsm-Datei bei der Hand? Könntest du sie hochladen, damit ich sie mir mal ansehe? Datei-Endung bitte in zip ändern, damit die Forumsoftwäre damit klarkommt.
Hast du eine unwichtige xlsm-Datei bei der Hand? Könntest du sie hochladen, damit ich sie mir mal ansehe? Datei-Endung bitte in zip ändern, damit die Forumsoftwäre damit klarkommt.
-
- Beiträge: 38
- Registriert: So 15. Mai 2016, 13:33
Re: .XLSM in CSV umwandeln
Vill. habe ich mich falsch ausgedrückt.
Es ist eine .XLSM weil dort Makros drin sind, jedoch brauche ich nur die Excel Daten in CSV ohne iwelche Makros. Hab dir mal im Anhang eine Test.xlsm angefügt.
Ich habe soeben nochmal die Makros rausgenommen, da die nicht relevant sind, also bitte beim Öffnen der Test.xlsm nicht verwirren, lassen, aufgrund der Debugg Meldung.
Es ist eine .XLSM weil dort Makros drin sind, jedoch brauche ich nur die Excel Daten in CSV ohne iwelche Makros. Hab dir mal im Anhang eine Test.xlsm angefügt.
Ich habe soeben nochmal die Makros rausgenommen, da die nicht relevant sind, also bitte beim Öffnen der Test.xlsm nicht verwirren, lassen, aufgrund der Debugg Meldung.
Zuletzt geändert von dash_develop am Mi 29. Mär 2017, 21:22, insgesamt 1-mal geändert.
Re: .XLSM in CSV umwandeln
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:
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.
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.
-
- Beiträge: 38
- Registriert: So 15. Mai 2016, 13:33
Re: .XLSM in CSV umwandeln
Vielen lieben Dank.
Werde mich morgen direkt an die weitere Arbeit machen. Aber das war schon eine große Hilfe.
Weitere Fragen, wenn mir schon einer Antwortet!
Wäre das auch möglich die Datei in eine Stringlist zu laden oder kann ich das bloß als CSV abspeichern.
Ist es auch möglich das falls eine Datei in dem Ordner ist automatisch bearbeitet wird?
Gruß
dash_develop
Werde mich morgen direkt an die weitere Arbeit machen. Aber das war schon eine große Hilfe.
Weitere Fragen, wenn mir schon einer Antwortet!
Wäre das auch möglich die Datei in eine Stringlist zu laden oder kann ich das bloß als CSV abspeichern.
Ist es auch möglich das falls eine Datei in dem Ordner ist automatisch bearbeitet wird?
Gruß
dash_develop
Re: .XLSM in CSV umwandeln
Direkt in eine Stringlist schreiben kann fpspreadsheet nicht. Aber du kannst doch die CSV-Datei gleich anschließend in eine Stringlist einlesen:
Die Stringlist muss natürlich vorher erzeugt und nachher wieder freigegeben werden.
Was meinst du mit dem automatischen Bearbeiten, falls eine Datei in dem Ordner ist? Meinst du den Dateinamen, damit die alte Datei nicht überschrieben wird. Das geht natürlich. Wenn du mir versprichst, dass das ganze keine Hausaufgabe ist, verrate ich dir die Lösung...
Code: Alles auswählen
procedure XLSMDataToStringList(AFileName: String; AList: TStringList);
var
workbook: TsWorkbook;
begin
workbook := TsWorkbook.Create;
try
workbook.ReadFromFile(AFileName, sfOOXML);
workbook.WriteToFile(ChangeFileExt(AFileName, '.csv'), sfCSV, true);
AList.LoadfromFile(ChangeFileExt(AFileName, '.csv'));
finally
workbook.Free;
end;
end;
Die Stringlist muss natürlich vorher erzeugt und nachher wieder freigegeben werden.
Was meinst du mit dem automatischen Bearbeiten, falls eine Datei in dem Ordner ist? Meinst du den Dateinamen, damit die alte Datei nicht überschrieben wird. Das geht natürlich. Wenn du mir versprichst, dass das ganze keine Hausaufgabe ist, verrate ich dir die Lösung...
-
- Beiträge: 38
- Registriert: So 15. Mai 2016, 13:33
Re: .XLSM in CSV umwandeln
Nein, Hausaufgabe ist das keine. Ich bin schon aus der Schule raus. Hatte nur 2 - 3 mal Visual Basic gehabt...
Wäre froh gewesen, hätten wir sowas mal gemacht.
Mache das Hobbymäßíg, um Routine arbeiten zu automatisieren.
Achso ok, clever. Du lädst einfach die CSV in die Stringlist, wenn ich das richtig erkenne... Ich denke manchmal einfach zu kompliziert.
Naja werde das heute aber weiter nicht testen können. Werde morgen weiter dran arbeiten.
Achso. Nein ich meine falls eine Datei mit einem bestimmten Namen im Ordner ist, das die Automatisch eine Prozedure durchläuft.
Wäre froh gewesen, hätten wir sowas mal gemacht.
Mache das Hobbymäßíg, um Routine arbeiten zu automatisieren.
Achso ok, clever. Du lädst einfach die CSV in die Stringlist, wenn ich das richtig erkenne... Ich denke manchmal einfach zu kompliziert.
Naja werde das heute aber weiter nicht testen können. Werde morgen weiter dran arbeiten.
Achso. Nein ich meine falls eine Datei mit einem bestimmten Namen im Ordner ist, das die Automatisch eine Prozedure durchläuft.