Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
176to180
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
176to180
176to180
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schneller Export als CSV mit ";"

Schneller Export als CSV mit ";"
06.11.2002 20:04:28
Andreas Perlitz
Hallo,

ich habe das Problem, in Excel per VBA als CSV exportieren zu müssen. Jedoch als Trennzeichen ein ";" benötige. Nun gibts hier ja schon einige Lösungen, die leider alle viel zu langsam sind. Gibts evtl. ne Methode die performanter ist wie z.B. die untige?

Vielen Dank und Gruß
Andreas

Sub AlsTextSpeichern()
Dim TB As Worksheet, Dateinummer%
Dim z%, s%, exportfile$, TMP$
exportfile = "C:\test.csv"
Dateinummer = FreeFile
Set TB = ThisWorkbook.Worksheets(1)

Open exportfile For Output As #Dateinummer

For z = 1 To TB.UsedRange.Rows.Count
If Cells(z, 2).Value = Text Then SL = 10 Else SL = 6
For s = 1 To TB.UsedRange.Columns.Count
TMP = TMP & CStr(TB.Cells(z, s).Text) & ";"
Next s
TMP = Left(TMP, Len(TMP) - 1)
Print #Dateinummer, TMP
TMP = ""
Next z
Close #Dateinummer
End Sub


2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Schneller Export als CSV mit ";"
06.11.2002 22:50:27
Ramses
Hallo Andreas,

Verwende die Write# Methode um Daten in eine Datei zu sschreiben. Sonst könnten bei einem späteren Einlesen Probleme auftauchen.Ganz allgemein gebe ich zu bedenken, dass in Deutschland das Komma als Dezimaltrennzeichen gilt,... ein späteres Einlesen also unmöglich ist und auch für die weitere Verwendung keinen Sinn macht.

Das sollte so gehen:

Sub Replace_Semikolon_in_CSV_File()
'Allgemeine Variablen
Dim i As Long, n As Integer
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim TxtLines As Long
Dim TextArr As Variant
'Dateiname als Variable
Dim fName As String
fName = "C:\demo_csv.csv"
'Speichern einer aktiven Datei als CSV-file
ActiveWorkbook.SaveAs Filename:=fName, FileFormat:=xlCSVMSDOS, _
        CreateBackup:=False
ActiveWorkbook.Close
'Schliessen einer allenfalls geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open fName For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
TxtLines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
    Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
    'Zähler hochzählen
    TxtLines = TxtLines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1

'Erneutes Öffnen um zum Dateianfang zu kommen
Open "c:\demo_csv.csv" For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim TextArr(TxtLines)
'Einlesen der Dateien in das Array
For i = 1 To TxtLines
    Line Input #1, TextArr(i)
    For n = 1 To Len(TextArr(i))
        'Suchen nach dem Semikolon
        If Mid(TextArr(i), n, 1) = "," Then
            'Ersetzen des Semikolins
            TextArr(i) = Application.WorksheetFunction.Replace(TextArr(i), n, 1, ";")
        End If
    Next n
Next i
Close #1
'Zum zurückschreiben musst du den ganzen Array
'wieder in die Datei zurückschreiben.
Open "C:\Demo_csv.csv" For Output As #1
For i = 1 To TxtLines
    Write #1, TextArr(i)
Next i
Close #1
End Sub

     Code eingefügt mit Syntaxhighlighter 1.14

Hier wird die DAtei zuerst exportiert, dann die Datei in ein Array eingelesen und im Array das Semikolon ersetzt.
Geht extrem schnell.


Gruss Rainer

Anzeige
Re: Schneller Export als CSV mit ";"
07.11.2002 10:45:53
Andreas Perlitz
Hallo Rainer,

stimmt, is schnell ;-)
Ich bin auf ne ähnliche Lösung gekommen (um 2:00 Uhr), doch bei weitem nich so elegant wie die Sache mit dem Array.

Vielen Dank
Gruß
Andreas

P.S.: Sollte es interessieren, hier meine Lösung:

'
' Export des aktiven sheets als CSV
'

exportfile_STRG= "C:\exportdatei.csv"

If Dir("C:\csvexport.tmp") = "csvexport.tmp" Then Kill ("C:\csvexport.tmp")
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs FileName:= _
"C:\csvexport.tmp", FileFormat:=xlCSV, _
CreateBackup:=False
ActiveWorkbook.Close SaveChanges:=False

Workbooks.OpenText FileName:= _
"C:\csvexport.tmp", _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _
, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1)


Cells.Replace What:=",", Replacement:=seperator_STRG, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False

ActiveWorkbook.SaveAs FileName:= _
exportfile_STRG, _
FileFormat:=xlTextPrinter, CreateBackup:=False


ActiveWorkbook.Close SaveChanges:=False

Kill ("C:\csvexport.tmp")

End Sub

Anzeige

172 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige