.XLSM in CSV umwandeln

Für Fragen von Einsteigern und Programmieranfängern...

.XLSM in CSV umwandeln

Beitragvon dash_develop » 29. Mär 2017, 17:54 .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 :)
dash_develop
 
Beiträge: 38
Registriert: 15. Mai 2016, 12:33

Beitragvon wp_xyz » 29. Mär 2017, 17:57 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.
wp_xyz
 
Beiträge: 1788
Registriert: 8. Apr 2011, 08:01

Beitragvon dash_develop » 29. Mär 2017, 18:53 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?
dash_develop
 
Beiträge: 38
Registriert: 15. Mai 2016, 12:33

Beitragvon wp_xyz » 29. Mär 2017, 19:01 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.
wp_xyz
 
Beiträge: 1788
Registriert: 8. Apr 2011, 08:01

Beitragvon dash_develop » 29. Mär 2017, 19:25 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.
Zuletzt geändert von dash_develop am 29. Mär 2017, 20:22, insgesamt 1-mal geändert.
dash_develop
 
Beiträge: 38
Registriert: 15. Mai 2016, 12:33

Beitragvon wp_xyz » 29. Mär 2017, 19:54 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:
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.
wp_xyz
 
Beiträge: 1788
Registriert: 8. Apr 2011, 08:01

Beitragvon dash_develop » 29. Mär 2017, 20:19 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! :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
dash_develop
 
Beiträge: 38
Registriert: 15. Mai 2016, 12:33

Beitragvon wp_xyz » 29. Mär 2017, 20:33 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:
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...
wp_xyz
 
Beiträge: 1788
Registriert: 8. Apr 2011, 08:01

Beitragvon dash_develop » 29. Mär 2017, 20:45 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.
dash_develop
 
Beiträge: 38
Registriert: 15. Mai 2016, 12:33

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried