.XLSM in CSV umwandeln

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
dash_develop
Beiträge: 38
Registriert: So 15. Mai 2016, 13:33

.XLSM in CSV umwandeln

Beitrag von dash_develop »

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 :)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: .XLSM in CSV umwandeln

Beitrag von wp_xyz »

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.

dash_develop
Beiträge: 38
Registriert: So 15. Mai 2016, 13:33

Re: .XLSM in CSV umwandeln

Beitrag von dash_develop »

.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?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: .XLSM in CSV umwandeln

Beitrag von wp_xyz »

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.

dash_develop
Beiträge: 38
Registriert: So 15. Mai 2016, 13:33

Re: .XLSM in CSV umwandeln

Beitrag von dash_develop »

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.
Zuletzt geändert von dash_develop am Mi 29. Mär 2017, 21:22, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: .XLSM in CSV umwandeln

Beitrag von wp_xyz »

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.

dash_develop
Beiträge: 38
Registriert: So 15. Mai 2016, 13:33

Re: .XLSM in CSV umwandeln

Beitrag von dash_develop »

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! :P
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

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: .XLSM in CSV umwandeln

Beitrag von wp_xyz »

Direkt in eine Stringlist schreiben kann fpspreadsheet nicht. Aber du kannst doch die CSV-Datei gleich anschließend in eine Stringlist einlesen:

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...

dash_develop
Beiträge: 38
Registriert: So 15. Mai 2016, 13:33

Re: .XLSM in CSV umwandeln

Beitrag von dash_develop »

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.

Antworten