PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit 1-Klick aus MS Excel eine Gambio-konforme CSV-Datei erzeugen



KlausK
05.05.2018, 14:53
Gambio empfiehlt ab GX Version 2.1 nur noch die UTF-8 Kodierung zu verwenden. Denn UTF-8 (Universal Character Set (UCS) Transformation Format for 8-Bit) ist die am weitesten verbreitete Kodierung für UCS- bzw. Unicode-Zeichen (Wikipedia). Microsoft Excel lässt sich jedoch nur schwer bzw. gar nicht zum Export einer CSV-Datei im UTF-8 Code bewegen.

Eine Excel-Tabelle lässt sich zwar als CSV-Datei speichern. Die CSV wird dann aber mit dem nicht wählbaren Trennzeichen ; und trotzdem in ANSI-Codierung gespeichert. Sämtliche Umlaute werden dann im Shop mit unlesbaren Zeichenkombinationen präsentiert. Wer HTML-Code mit CSS-Elementen in seiner Produktbeschreibung verwendet, hat dann noch ein zusätzliches Problem!

Manche wollen auf MS Excel nicht verzichten und nutzen nur wegen der CSV-Erzeugung zusätzlich z.B. Libre-Office oder konvertieren die CSV anschließend mit Notepad++ in UTF8.

Das dauert alles viel zu lange und kann mit einem Klick erledigt werden! Mit einem FTP-Clienten wie z.B. Webdrive lässt sich im Windows-Explorer ein dauerhaft verbundenes Netzlaufwerk zu eurem Shopverzeichnis erstellen. So lässt sich die CSV mit einem Klick direkt im Shopverzeichnis erzeugen.

Die Lösung bringt der nachstehende, auf das Wichtigste reduzierte VBA-Code. Einfach erklärt, für jeden Newbie leicht einzubauen. Eine Beispiel-Mappe habe ich hier ebenfalls hochgeladen. Der Excel/VBA-Kenner baut sich daraus schnell ein individuelles Tool.

Anleitung:

Archiv excel_to_csv.zip runterladen, entpacken und excel_to_csv.xlsm öffnen
Es folgt vermutlich eine Sicherheitswarnung. Diese Warnung ist korrekt, kann aber auch deaktiviert werden
Ihr seht eine vorgefertigte Tabelle mit allen importierbaren Spalten und 3 Beispiel-Artikeln
Außerdem eine Schaltfläche für den CSV-Export, die mit Rechtsklick beliebig verschoben werden kann
Alles was auf dieser Seite steht wird bei Klick ohne Rückfrage unter C:\art_exp.csv (default) gespeichert
Mit Excel >>> Entwicklertools >>> Visual Basic kommt ihr zum Makro um dort erklärte Anpassungen vorzunehmen
Das Macro funktioniert mit Excel 14 (2010) 32 und 64 Bit, sollte aber schon ab spätestens Version 11 (2003) bis 365 laufen



Wer nichts runterladen will, hier der Code (einfügen in Standardmodul):


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



Hier die Beispiel-Arbeitsmappe für Microsoft Excel 14 (Excel 2010) und neuer