Datei als CSV speicern - von aussen?

Hallo allerseits,

ich bin ein absoluter Excel-Laie, das vorneweg.

Nun bekomme ich regelmäßig Excel-Dateien, die Daten für meine Datenbanken beinhalten. Ich möchte diese automatisiert einladen und brauche sie als CSV-Datei.

NUn habe ich herausgefunden, daß es in Excel-VBA eine einfache Möglichkeit dazu gibt:
ActiveWorkbook.SaveAs FileFormat:=xlCSVWindows

oder so.

Wie kann ich erreichen, daß diese Anweisung von aussen ansteuerbar wird? Dann könnte ich sie in einen Script einbauen, etwa so:

excel.exe -runMacro SaveAsCSV MeineDatei.xls MeineDatei.csv

Die Frage ist also: wie muß ich den Makro SaveAsCSV speichern, und geht das überhaupt? Oder welche andere Lösung gibt es dafür?

Gruß und Danke im voraus

Sancho

Hallo,

Du kannst es im VBA-Editor bei „Diese Arbeitsmappe“ als

private sub Workbook\_Open()

speichern. Es sollte dann etwa so aussehen:

Private Sub Workbook\_Open()
 Workbooks.Open Filename:="C:\DeinPfad\Dateiname.xls"
 ActiveWorkbook.SaveAs Filename:="C:\DeinPfad\Dateiname.csv", FileFormat:=xlCSV, \_
 CreateBackup:=False
 ActiveWorkbook.SaveAs FileFormat:=xlCSVWindows
End Sub

Gruß, Bernd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, Sancho!

Nun bekomme ich regelmäßig Excel-Dateien, die Daten für meine
Datenbanken beinhalten. Ich möchte diese automatisiert
einladen und brauche sie als CSV-Datei.

Von wo aus bzw. wo rein? Wo und wie möchtest Du das automatisch machen? Access? VB?

Die Frage ist also: wie muß
ich den Makro SaveAsCSV speichern, und geht das überhaupt?
Oder welche andere Lösung gibt es dafür?

Gehen tut fast alles. Wie gesagt: Wie hättest Du es gerne?

Gruß, Manfred

Hi!

Ich möchte diese automatisiert
einladen und brauche sie als CSV-Datei.

Von wo aus bzw. wo rein? Wo und wie möchtest Du das
automatisch machen? Access? VB?

Das geht in eine Prozesskette, die zeitgesteuert auf einer DOS-Box abläuft. Alle weiteren Schritte sind dort gut untergekommen, lediglich die Konvertierung Excel-CSV muß ich noch manuell erledigen.

Gehen tut fast alles. Wie gesagt: Wie hättest Du es gerne?

Am besten über einen Aufruf aus der Windows-Kommandozeile (Windows 2000 bzw. 2003 Server). Gegeben: Quelltatei (Excel), benötigt: Zieldatei (CSV).

Gruß

Sancho

Hi,

Du kannst es im VBA-Editor bei „Diese Arbeitsmappe“ als

Danke, aber wie kann ich das dann außerhalb Excels aufrufen?
Oder verstehe ich das völlig falsch?

Gruß

Sancho

Hallo,

wenn Du einfach diese Datei aufrufst (z.B. über eine batch-Datei), dann startet Dein WinWelcheVersionAuchImmer automatisch Excel, öffnet diese Datei und führt Dein Makro aus.

Gruß, Bernd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 „Gefällt mir“

Hi!

wenn Du einfach diese Datei aufrufst (z.B. über eine
batch-Datei), dann startet Dein WinWelcheVersionAuchImmer
automatisch Excel, öffnet diese Datei und führt Dein Makro
aus.

Ahh, kapiert.

Funktioniert prima, bloß habe ich ein Problem und eine Frage:

Problem: Die CSV-Datei enthält Kommata als Separator. Wenn ich manuell exportiere, gibt es statt dessen Semikola. Kann man das irgendwo einstellen oder als Parameter übergeben?

Frage: Könnte man den zu öffnenden Dateinamen als Parameter übergeben?

Gruß und vielen Dank

Sancho

Von wo aus bzw. wo rein? Wo und wie möchtest Du das
automatisch machen? Access? VB?

Das geht in eine Prozesskette, die zeitgesteuert auf einer
DOS-Box abläuft. Alle weiteren Schritte sind dort gut
untergekommen, lediglich die Konvertierung Excel-CSV muß ich
noch manuell erledigen.
Am besten über einen Aufruf aus der Windows-Kommandozeile
(Windows 2000 bzw. 2003 Server). Gegeben: Quelltatei (Excel),
benötigt: Zieldatei (CSV).

Hi Sancho,
kenne mich mit dem neumodischen Krams nich aus, Prozesskette ist das das Scripting einer Dos-Batch?
Wäre das die Lösung für dich wenn du folgende Dos-Batch in deiner Prozesskette startest der in etwa so aussehen würde.
Annahme die Dos-Batch heißt Ausfuehr.bat, dann wird sie aufgerufen mit

[Call] c:\test\ausfuehr.bat deinexls.xls deinexls.csv ,

(Der dritte Parameter gibt das beliebige Trennzeichen an, hier Komma)

Die Ausfuehr.bat sähe dann so aus:

echo %%1 > c:\test\Ausfuehr.txt
echo %%2 >> c:\test\Ausfuehr.txt
echo %%3 >> c:\test\Ausfuehr.txt
excel.exe Ausfuehr.xls

In der Ausfuehr.xls wird dann wie dir schon geschrieben beim Öffnen ein Makro ausgeführt, daß Ausfuehr.txt ausliest und die dementsprechende .csv erzeugt.

Tja, noch keine Zeile Code fertig und schon sehe ich das erste Problem, was tun mit der Sicherheitsabfrage wegen des Makros beim Öffnen der Ausfuehr.xls? Makrosicherheit auf Null ist irgendwie nicht so gern gesehen bei Netzwerkadministratoren :smile:))

(Vielleicht unnötig, aber du schriebst du bist Excel Neuling, deshalb, man kann Excel sagen wie es mit Dateien umgehen soll, die Makros enthalten Wenn nun dies so eingestellt ist daß Excel warten soll bis du manuell zugestimmt hast, diese Datei trotz makros zu öffnen, dann wird das nichts mit automatisierten Start ohne dein Beisein.)

Gruß
Reinhard

Hi Sancho,

wenn Du einfach diese Datei aufrufst (z.B. über eine
batch-Datei), dann startet Dein WinWelcheVersionAuchImmer
automatisch Excel, öffnet diese Datei und führt Dein Makro
aus.

Problem: Die CSV-Datei enthält Kommata als Separator. Wenn ich
manuell exportiere, gibt es statt dessen Semikola. Kann man
das irgendwo einstellen oder als Parameter übergeben?

Irgendwo kann man den Delimeter/Seperator angeben, weiß jetzt grad nicht obs beim Öffnen einer Textdatei ist oder beim Speichern wie du es möchtest. Alternativ und gar nicht aufwendig ist eigener Code der mit beliebigem Seperator abspeichert. Also Antwort im Sinne der Frage:Ja.

Frage: Könnte man den zu öffnenden Dateinamen als Parameter
übergeben?

Ja, siehe meine andere Antwort, da ist ein Weg angedeutet.

Gruß
Reinhard