*.dbf Dateien in *.csv konvertieren (inkl. Spaltenüberschriften)

thebe

fühlt sich hier wohl
Hallo liebe Schwarmintelligenz!

Ich benötige mal bitte eure Hilfe!

Folgendes Anliegen:
Ich habe eine große Zahl von DBF-Dateien welche ich in eine CSV umwandeln muss.
Diese CSVs sollen auch die Spaltenüberschriften beinhalten.

Was ich bis jetzt versuchte habe ist folgendes:
Wenn ich eine DBF-Datei in Excel öffne, funktioniert dies und die Spaltenüberschriften bleiben erhalen.
Diese geöffnete DBF-Datei speicher ich dann als Dateityp, also im Dropdownmenü von Excel, als CSV (Trennzeichen-getrennt) (*.csv).
Soweit so gut!
Wenn ich das über einen Online-Konverter mache sind alle Daten der Spalte immer in einer Zeile dargestellt, also ohne Spaltentrennung und ohne Spaltenüberschrift.

Wenn es ja nur eine Konvertierung betreffen würde wäre das ja ok.
Aber ich hab einige hundert diese DBF-Dateien und das raubt mir den Verstand!:cry:

Im Anschluss der Konvertierungen will ich die ganzen CSVs in einer einzigen CSV-Datei zusammenfügen und nicht Hunterte einzel-CSVs zu haben.

Hoffe ich habe mein Anliegen halbwegs vernüftig erläutert und Ihr könnt damit was anfangen und mir helfen!

Ich danke schon mal jeden der dieses Anliegen überhaupt schon mal liest! ;)

Ein großes Dankeschön!:love:
 
So ganz kann ich nicht verstehen, was die Aktion bewirken soll bzw. wofür die csv-Datei gut sein soll.

Eine csv-Datei ist doch eine Textdatei, in der Spaltenbezeichnungen als auch Werte untereinander z.B. durch Komma, Semikolon, Leerzeichen getrennt sind.

In Excel würde man sie mit "Text in Spalten" über einen Assistenten konvertieren und als xls- bzw. xlsx- Datei abspeichern.

Die dbf-Dateien haben die Spalten ja schon beim Öffnen in Excel und wenn die vielen Dateien alle die gleichen Spalten haben, dann kann man doch auch jeweils alle dbf-Dateien nach und nach öffnen und die Werte untereinander in Excel kopieren zu einer Tabelle.
Das habe ich auch schon mit Spaltenköpfen gemacht dann sortiert und die Mehrwerte der Spaltenköpfe gelöscht.

Mir ist nur nicht klar, wofür du eine gesamte csv-Datei haben möchtest, weil das ja nur ein Übergangsformat ist.
Da gibt als Endprodukt keine Spalten, weil das eine Textdatei ist.
 
Hallo Gamme-Ray!
Herzlichen Dank für deine Antwort!

Also die DBF Dateien müssen in das CSV konvertiert werden weil diese CSV-Datei in ein Anderes Programm zu Auswertrung eingespielt wird.
(anders geht das leider nicht)
Darum will ich ja auch im Anschluss alle CSV in eine einzige CSV-Datei einbinden.
Wenn ich alle DBF-Dateien einzeln "anpacke" sitze ich 2025 noch daran, sind 1125 Stück! ;)
 
Zuletzt bearbeitet:
Also ich habe ja schon einiges an Daten zusammengestellt, aber so noch nicht.
Ein anderes Programm ist was? SAP oder eine andere betriebswirtschaftliche Software?

Mit Onlinekonvertern habe ich noch nicht gearbeitet. Vielleicht versuchst du es dort über
den Umweg dbf -> xls -> dann mit Excel in csv konvertieren?
 
Nochmals Danke für Deine Antwort!
Das Programm, welches ich meine, ist IDEA. Die Finanzverwaltung arbeitet damit.
Ich will einem Kumpel helfen dessen Kasse ´ne Macke hat und nun die DBFs konvertieren.
Kann ja auch nicht 1125 alle einzeln, von mir aus auch Onlinekonverter, anpacken und online konvertieren. :(

Den Umweg dbf -> xls -> dann mit Excel in csv konvertieren brauch ich ja nicht da ich die DBF ja in Excel öffnen kann, auch mit Spalten und Überschriften.
Am einfachste, denke ich mal, wäre eine Batch-Datei die sich alle DBFs aus einem Ordner automatisch "zu Brust nimmt" und diese dann in eine einzige csv konvertiert! (Denk ich mal) :rolleyes:
 
Ja, da hilft vermutlich nur im Internet suchen, z.B. hier:
 
Moin,

ich kenne mich leider mit DBF-Dateien nicht aus... aber wenn man die mit Excel öffnen kann, sollte das mit Powershell recht leicht umsetzbar sein.

Versuche mal folgendes:

Folgendem Code mit der Endung ".ps1" abspeichern und oben den Quellpfad zu den DBF-Dateien abändern. Anschließend Rechtsklick auf diese Datei und "Mit Powershell ausführen" auswählen.
Probiere das aber am besten erst mal in einem Testordner mit einzelnen Dateien aus, bevor du das auf die 1125 Dateien los lässt:
Code:
# Quellpfad zu den DBF-Dateien
$Source = "C:\Test"
 
# Excel öffnen
$Excel = New-Object -ComObject Excel.Application -Property @{DisplayAlerts=$false}
 
# Fehlerbehandlung
$ErrorActionpreference = "Stop"
try {
  Foreach ($DBF in Get-ChildItem "$Source\*.dbf"|?{!(Test-Path "$Source\$($_.Basename).csv")}) {
    Write-Host -NoNewLine ('Öffne "{0}"... ' -f $DBF.Name)
    $WB = $Excel.Workbooks.open($DBF.FullName)
    Write-Host -f green "ok."
    
    [io.FileInfo]$CSV = '{0}\{1}.csv' -f $DBF.DirectoryName,$DBF.BaseName
    Write-Host -NoNewLine ('Speichere als "{0}"... ' -f $CSV.Name)
    $WB.SaveAs($CSV.FullName,62)
    Write-Host -f green "ok."
    $WB.Close($false)
  }
    
  Write-Host -NoNewLine "Füge CSV-Dateien zusammen... "
  $Ergebnis = Foreach ($CSV in Get-ChildItem "$Source\*.csv" -Exclude "Ergebnis.CSV") {Import-CSV -d ';' $CSV}
  Write-Host -F green "ok."
    
  Write-Host -NoNewLine 'Speichere als "Ergebnis.csv"... '
  $Ergebnis | Export-CSV -d ';' -NoTypeInfo -Encoding UTF8 "$Source\Ergebnis.csv"
  Write-Host -F green "ok."
    
  Write-Host -F green "`nDie Konvertierung wurde erfolgreich abgeschlossen. "
  Foreach ($i in 10..1) {
    Write-Host -NoNewLine -F yellow ("`r---  Wird beendet in {0,2} Sekunden  ---" -f $i)
    sleep 1
  }
} catch {
  Write-Host -F red $_.Exception.Message
  Write-host -F yellow "---  Beliebige Taste zum Beenden  ---"
  [Console]::ReadKey($true)
} finally {
  do {$i = [System.Runtime.InteropServices.Marshal]::ReleaseComobject($Excel)} until ($i -le 0)
}

Gruß Thomas
 
Zuletzt bearbeitet:
@Gamma-Ray
Ich Danke Dir! Hab das Tool mal getestet. Der haut mir alles ohne Spaltentrennung rein. Muss da vermutlich im Tool etwas anpassen, wieß aber noch nicht genau was. :oops: Ich bleib da aber dran!
Danke Dir

 
@TK87
Ich hab das jetzt mal mit 10 Dateien getestet und es scheint zu klappen! (y):love:
Ich lasse den Rechner jetzt mal in Ruhe alles abarbeiten und schaue dann später mal das Ergebnis an.
Scheint aber echt zu funktionieren! Das wäre genial!
Ich werde aber auf alles Fälle berichten!
Der Braucht pro Datei 10 Sekunden, also hab ich jetzt über 3 Stunden Pause!;)
Gehe mir so lange ein Bier auf euer Wohl trinken!
Also bis später und ganz lieben Dank an euch! (mit viel Zucker ober drauf) :love:(y)(y)
 
Ich habe gerade festgestellt, das ich eine Klammer falsch gesetzt habe, welche das Skript wohl enorm ausbremst.

Zudem habe ich ergänzt, dass bereits umgewandelte Dateien nicht mehr angepackt werden.

Habe es oben abgeändert, bitte noch mal neu nehmen.
 
@TK87
Das Konvertieren hat nur 2,5 Minuten gadauert! TOP (y)☺️

Zum Abschluss noch eine Frage, evtl. wieß jemand wie ich das machen soll.
In Anhang ist ein Bild der Ergebnisdatei nach der Konvertierung. In Spalte "J" mit ormal eine Zeit/Datumsangabe angezeigt. (also es soll so aussehen wie in Zelle 2 der Spalte "J". Wenn ich in der Zellenformatierung auf "Sonderformat" umstelle und dann einfach auch speichern klicke, behält es die Änderung nicht. Muss ich beim Speichern etwas zu Thema csv speichern beachten?
 

Anhänge

  • Ausschnitt_Beispiel_2.PNG
    Ausschnitt_Beispiel_2.PNG
    17,8 KB · Aufrufe: 36
Zuletzt bearbeitet:
Ich denke, das wird nicht klappen in csv. Vielleicht probierst du mal folgendes:
Formatiere hinten eine leere Spalte mit Datum und Uhrzeit.
Setze dort die Formel =J2 rein und schaue, ob das Datum mit Uhrzeit erkannt wird.
Wenn ja, kopiere den Rest in der Spalte herunter.
Dann müsstest du dahinter auch wieder eine leere Spalte mit der gleichen Formatierung
einfügen.
Zum Schluß kopierst du die Inhalte deiner Formelspalte dort hinein, aber als Werte, so
dass die Formel weg ist.
Das wiederum kopierst du dann ebenso in die Spalte J mit gleicher Formatierung.

Alternativ ist es vielleicht auch so möglich bei Import in das Programm der Finanzverwaltung
das Format zu erkennen?!
 
@TK87
Du hast dich da echt nochmal dran gesetz?!
Nö, hab den Code hier nur noch mal kurz überflogen und dabei sprang mir der Fehler quasi sofort ins Auge .

@TK87
In Anhang ist ein Bild der Ergebnisdatei nach der Konvertierung. In Spalte "J" mit ormal eine Zeit/Datumsangabe angezeigt. (also es soll so aussehen wie in Zelle 2 der Spalte "J". Wenn ich in der Zellenformatierung auf "Sonderformat" umstelle und dann einfach auch speichern klicke, behält es die Änderung nicht. Muss ich beim Speichern etwas zu Thema csv speichern beachten?
Nun, CSV ist eigentlich eine Tabelle ohne jegliche Formatierung, somit geht solche beim Speichern halt verloren. Excel versucht öfters mal, Werte beim Öffnen zu interpretieren. Öffne die Datei mal Bitte stattdessen mit einem Texteditor (Notepad oder ähnliches). Wie sieht die Zeile dort aus?
 
Zuletzt bearbeitet:
@Gamma-Ray
Ne, will er leider nicht. Scheitert schon an "=J2".
(siehe Bild)
Naja, ich werde das mal so wie es jetzt ist der Finanzverwaltung feierlich überreichen und mal sehen was wird! (y)
Ich bedanke mich nochmal bei euch für eure Unterstützung! Klasse! (y)(y)(y)(y)
Frohes Fest und guten Rutsch an alle! :love:
 
@TK87
In Notepad++ sieht die Zahl genau so aus wie in der Ursrünglichen DBF. z.B.: 20190622115203 dies wird in der CSV dann so angezeigt 2,01906E+13 ...Wenn ich die Zelle doppet anklicke ist die 20190622115203 vorhanden. Gehe ich aus der Zelle raus ist sie wieder 2,01906E+13.
Ich warte jetzt mal ab was die das sagen! (y)☺️
 
Oben