Konforme CSV-Datei aus Excel mit 1-Klick erzeugen

Thema wurde von KlausK, 5. Mai 2018 erstellt.

  1. KlausK

    KlausK Erfahrener Benutzer

    Registriert seit:
    7. Oktober 2012
    Beiträge:
    552
    Danke erhalten:
    107
    Danke vergeben:
    21
    Microsoft Excel lässt sich bekanntermaßen nur schwer zum Export einer CSV-Datei in UTF-8 Kodierung überreden. Wer es schonmal versucht hat, kennt die zahlreichen Probleme.

    Mit dem nachstehenden, auf das Wichtigste reduzierte VBA-Code arbeite ich schon seit etlichen Jahren, weil ich auf Excel nicht verzichten will. Ein Beispiel-Workbook habe ich hier bereitgestellt.

    Anleitung:
    • Archiv excel_to_csv.zip entpacken und excel_to_csv.xlsm öffnen
    • Es öffnet sich eine vorgefertigte Tabelle mit allen mir bekannten importierbaren Spalten
    • Die Schaltfläche für den CSV-Export kann mit Rechtsklick beliebig verschoben werden
    • Der komplette Inhalt wird bei Klick ohne Rückfrage unter C:\art_exp.csv (default) gespeichert
    • Im Menu unter Entwicklertools >>> Visual Basic kommt ihr zum Makro um dort erklärte Anpassungen vorzunehmen
    • Das Macro sollte schon ab spätestens Version 11 (2003) bis 365 laufen (32 und 64 Bit)


    Hier der Code für Excel-Kenner, einfügen in Standardmodul:

    Code:
    Sub Create_CSV()
    
    'Variablendeklaration (nicht ändern)
        Dim Exportdatei As String
        Dim Trennzeichen As String
        Dim Zellbereich As Range
        Dim Zeile As Object
        Dim Zelle As Object
        Dim TempZeile As String
        Dim Tabelle As String
    
    
    '### Eigene Anpassungen #########
    
        Tabelle = "Export_to_CSV"           'Name der zu exportierenden Tabelle angeben, hier ist es "Export_to_CSV"
       
        Trennzeichen = "|"                  'Trennzeichen angeben, hier "|" weil dieses normalerweise in keiner Beschreibung vorkommt.
                                            'Es muss immer ein Zeichen gewählt werden, dass niemals in eurer Export-Datei vorkommt.
                                            'Außerdem muss in der Import-Modul des Shops das selbe Zeichen ausgewählt werden!
                                           
        Exportdatei = "C:\art_exp.csv"      'Speicherort und Name der Export-CSV, hier "C:\ArtExp.csv"
                                            'Mit einem WebDAV oder FTP-Clienten wie z.B. Webdrive lässt sich ein dauerhaft verbundenes Netzlaufwerk zum Shopverzeichnis erstellen.
                                            'Der Pfad könnte dann z.B. so aussehen: "W:\httpdocs\domain\gambio_shop\export\art_exp.csv"
       
    '### Ab hier nichts mehr ändern #########
    
    
        Application.ThisWorkbook.Sheets(Tabelle).Activate
        Cells.Select
        Set Zellbereich = Sheets(Tabelle).UsedRange
       
        Open Exportdatei For Output As #1
            For Each Zeile In Zellbereich.Rows
                For Each Zelle In Zeile.Cells
                    TempZeile = TempZeile & Zelle & Trennzeichen
                Next Zelle
                Print #1, GetUTF8String(Left(TempZeile, Len(TempZeile) - 1))
                TempZeile = ""
            Next Zeile
        Close #1
        Application.ThisWorkbook.Sheets(Tabelle).Cells(1, 1).Select
       
    End Sub
    
    Private Function GetUTF8String(s As String) As String
       Dim i As Integer
       Dim utf16 As Long, uc(2) As Byte
      
       GetUTF8String = ""
       For i = 1 To Len(s)
          utf16 = AscW(Mid(s, i, 1))
          If utf16 < 0 Then utf16 = utf16 + 65536
          If utf16 < &H80 Then
             GetUTF8String = GetUTF8String & Chr(utf16)
          ElseIf utf16 < &H800 Then
             uc(1) = &H80 + (utf16 And &H3F)
             utf16 = utf16 \ &H40
             uc(0) = &HC0 + (utf16 And &H1F)
             GetUTF8String = GetUTF8String & Chr(uc(0)) & Chr(uc(1))
          Else
             uc(2) = &H80 + (utf16 And &H3F)
             utf16 = utf16 \ &H40
             uc(1) = &H80 + (utf16 And &H3F)
             utf16 = utf16 \ &H40
             uc(0) = &HE0 + (utf16 And &HF)
             GetUTF8String = GetUTF8String & Chr(uc(0)) & Chr(uc(1)) & Chr(uc(2))
          End If
       Next
    End Function
    
    
    Wer nicht weiß, was VBA oder Makros sind, sollte einfach erstmal die Beispielmappe für Microsoft Excel 14 (Excel 2010) und neuer ausprobieren.
     

    Anhänge: