Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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
Inhaltsverzeichnis

Export von csv-Daten, Datenformat

Export von csv-Daten, Datenformat
06.11.2023 08:35:52
EasyD
Hallo liebes Forum,

ich hab mal wieder etwas (aus meiner Sicht) kniffliges und bräuchte einen Denkanstoß, denn ich weiß nicht, an welcher Stelle ich mein Problem anpacken muss.

Ich habe ein Tool gebastelt, welches aus vielen xlsx-Dateien vom Aufbau her identische Daten in das Tool auf ein Blatt "Import" importiert, anschließend dieses Blatt nach bestimmten Daten durchsucht, und diese Daten dann auf ein Blatt "Export" kopiert um dieses Blatt dann schlussendlich als csv abzuspeichern. Soweit zum Grundsätzlichen.

Das Problem:
In einer der Spalten dieser csv-Datei, sind sehr lange Zeichenfolgen enthalten. Es handelt sich um Rechnungsnummern.
Die Zeichenfolgen sind daher numerisch, alphabetisch oder alphanumerisch, auch Sonderzeichen sind möglich. Die Probleme bereiten die numerischen Einträge.
In der Original xlsx-Datei sind diese numerischen Zeichenfolgen (teilweise 20 Stellen und mehr) noch korrekt enthalten.
Im Resultat - der csv-Datei - sind diese als "Wissenschaftliche Zahl" mit der Angabe "E+" enthalten - dies gilt es zu vermeiden! Die Rechnungsnummer darf nicht verfremdet werden.

Ich habe allerdings keinen Schimmer, an welchem Schritt der Prozedur ich hier irgendwie ändernd eingreifen könnte um dies zu beheben.
Ich kann daher auch erstmal nur recht vage beschreiben, worum es geht.

Wenn ich noch zur Fragenklärung nützliche Info beisteuern kann - natürlich gerne!

Eines vielleicht noch:
Das Tool hatte ich schon vor einiger Zeit erstellt - da hatte ich noch Office 2019 im Einsatz.
Heute bin ich bei 365 Business.

Öffne ich heute eine mit dem Tool erstellte csv-Datei, dann erhalte ich den Hinweis - das eine Dateikonvertierung durchgeführt wird "Konvertieren von Ziffern um den Buchstaben "E" in wissenschaftliche Notation" - exakt das Problem, dass ich vermeiden will. Ich werde gefragt, ob ich die Konvertierung dauerhaft beibehalten will - nein, will ich nicht! Da ich diese Wahl nur beim manuellen Öffnen einer solchen csv habe - kann man diese Aktion irgendwie in die Prozedur der csv-Erstellung einbauen? Die csv-Daten verschicke ich nämlich üblicherweise nur und der Empfänger soll sofort eine csv mit korrekten Rechnungsnummern erhalten!

Ich hoffe, nicht zu umständlich erklärt zu haben!

Grüße
Easy

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Export von csv-Daten, Datenformat
06.11.2023 09:39:41
Max
Schon versucht die Zellen im Import Blatt zu formatieren?
AW: Export von csv-Daten, Datenformat
06.11.2023 09:45:42
Oberschlumpf
Hi,

auch ich denke, die sehr langen Zeichenfolgen müssen im Blatt "Import" in TEXTwerte umgewandelt werden.
Bedeutet: In der Spalte muss jeder Eintrag mit ' beginnen, direkt folgend dann die sehr lange Zeichenfolge - in jeder Zeile

Ciao
Thorsten
AW: Export von csv-Daten, Datenformat
07.11.2023 13:12:27
Frank
Hallo,

tja, XL und CSV...
Leider hat das im Zusammenhang mit VBA noch nie genauso funktioniert, wie das manuelle Öffnen oder Speichern (abhängig von den Ländereinstellungen des Betriebssystems und Office).
Wie wär's denn damit, die CSV per
CreateObject("Scripting.FileSystemObject")
,
CreateTextFile
und
.write
selber zu erstellen?
Sinnvoll ist vielleicht auch, beim Kopieren der Werte von einem Blatt ins andere mittels CStr sicherzustellen, dass Zeichenketten auch als solche übergeben werden.

Grüsse
Frank
Anzeige
AW: Export von csv-Daten, Datenformat
08.11.2023 08:15:17
EasyD
Servus Frank,

danke für dein Feedback.

2 Erkenntnisse daraus:

Da ich das Problem mit dieser Exponentialschreibweise offensichtlich schon nach dem Import der Daten habe, müsste ich sicherlich erstmal dort anpacken, bevor ich versuche am Export der Daten / Erzeugung der csv herum zu schrauben.

Sofern der Import irgendwann korrekt ist, müsste ich mir erklären lassen, wie ich Deine Lösung konkret umsetzen muss. Hier kommt jetzt zum Tragen, dass ich bei meinen VBA-Kenntnissen "bescheiden" ausgewählt habe - mir fehlt schlicht das Verständnis um aus der Hüfte zu blicken, wie Du das gemeint hast.

Trotzdem erstmal Danke - ich versuche weiter den Import auf die Kette zu bekommen!

Grüße
Easy
Anzeige
AW: Export von csv-Daten, Datenformat
07.11.2023 13:54:09
Heli
Hi,

solche Konvertierungsprobleme kenne ich leider auch zu Genüge - meine für mich funktionierende Lösung:
_ Import-Blatt (da wo die Dateien reingesammelt werden) komplett als Text formatieren
_ Daten aus den Quell-Dateien nicht per Copy&Paste sondern über ein Array importieren (dann versucht Excel nicht eine Zahl mit mehr als 15 Stellen in Exponentialschreibweise darzustellen)
_ Daten per Formel ins Exportsheet übernehmen (=WENNFEHLER usw.)
_ Export-Sheet entweder mit Formel =TEXTVERKETTEN vorbereiten oder per Array zusammenfassen
_ als Letztes die Daten aus dem Export-Sheet (bereinig) dann wie von Frank beschrieben per Scripting in ein neues File schreiben

Ja klingt etwas aufwendiger dafür kommen Dir die ganzen Konvertierungsversuche nicht in die Quere.

Vielleicht hilft's als Denkanstoß ;-)

Servus, Heli
Anzeige
AW: Export von csv-Daten, Datenformat
08.11.2023 08:37:44
Oberschlumpf
Hi,

und du lässt noch immer fleißig - weiterraten - !!

Nein, nein, du musst nich ne Bsp-Datei für's bessere Verständnis per Upload zeigen - aber genau DAS könnte soo guuut helfen^^

Und nein, deine mal geäußerte Vermutung, erst mal alle Originaldaten in Bsp-Daten umzuwandeln zu müssen, ist falsch.

Es wird doch nicht deine Original-Datei mit geänderten Originalwerten gebraucht!
Du könntest doch einfach...

...eine ganz neue Datei erstellen
...in dieser neuen Datei die oberste Zeile als Überschriftenzeile mit Bsp-Überschriften! verwenden (wenn du im Original auch ne Überschr.zeile hast)
...in der neuen Datei in die selben Spalten/Zeilen einige Datenzeilen einfügen, die - nicht - die Originalwerte, sondern nur Bsp-Werte enthalten - wichtig ist halt nur - dass die Anzahl Zahlen/Zeichen pro Zelle gleich ist mit der Anzahl an Zahlen/Zeichen im Original
...wenn du im Original z Bsp 100 Datenzeilen hast, reichen in der neuen BSP!-Datei schon 10 Zeilen - denn das von dir beschriebene Problem würde doch schon in der 1. Datenzeile auftreten, wenn dort eine zu lange Zahl enthalten ist
...und natürlich sollten als Blattnamen mind. "Import" und "Export" enthalten sein
...und dein Code (nur der Code, der die Werte zuerst ins Import-Blatt und später ins Export-Blatt überträgt), an die neue Datei angepasst, sollte natürlich auch nicht fehlen

Und das Erstellen einer - ganz neuen - Bsp-Datei würde auch für dich nur wenige Minuten dauern.

Aber ok, lass die netten Helfer doch einfach....weiterraten...

Ciao
Thorsten
Anzeige
AW: Export von csv-Daten, Datenformat
08.11.2023 08:22:07
EasyD
Servus Heli,

das Problem ist also bekannt - naja, das macht mich nicht fröhlicher...

Falls es irgendwie hilft und Du Zeit noch Lust hast (!!!), hierzu vielleicht was zu sagen - nachfolgend die komplette Prozedur für den Import der Daten. Das Problem tritt schon dort auf / vor dem Export (CopyData wird in einer anderen Prozedur aufgerufen, welche alle xlsx-Dateien eines Verzeichnisses abgrast - läuft also mehrfach nacheinander).

Hier noch nicht berücksichtigt ist Dein Vorschlag, das Import-Blatt als Text zu formatieren. Ich habe das allerdings vor dem Import auch mal manuell gemacht, ohne Änderung im Ergebnis. Hätte aber funktionieren müssen, weil der Code unten am Format des Blattes nichts ändert, richtig?

Sub CopyData(FullName As String, MitKopfzeile As Boolean, z As Integer)
Dim wbkImp As Workbook, wbkDst As Workbook
Dim wksImp As Worksheet, wksDst As Worksheet
Dim fRow As Integer
Dim lRow As Long, lCol As Integer
Dim wbk As Workbook
Dim aData()
Dim i As Variant

On Error GoTo ErrorHandler
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With

If MitKopfzeile Then '1. Durchlauf mit Kopfzeilen, dann ohne
fRow = IIf(z = 0, 1, 2)
Else 'Keine Kopfzeile vorhanden, also immer ab 1. Zeile
fRow = 1
End If

'Quelldatei öffnen und Daten in Array kopieren
Set wbkDst = ActiveWorkbook
Set wksDst = ActiveSheet
Workbooks.Open FileName:=FullName
Set wbkImp = ActiveWorkbook
Set wksImp = wbkImp.Sheets(1)
lRow = LastRowAll(wksImp)
lCol = LastColAll(wksImp)
aData = wksImp.Range(Cells(fRow, 1), Cells(lRow, lCol))

'In die Zieldatei schreiben
lRow = LastRowAll(wksDst) + Abs(CInt(z > 0))

'Die Einrichtung ergänzen (im Journal nicht enthalten, nur im Blattnamen an 8.Stelle)
'1xlige Eintragung in der ersten Journalzeile der jeweiligen Einrichtung
wksDst.Range("A" & lRow).Resize(UBound(aData), lCol) = aData()
wksDst.Range("A" & lRow).Resize(UBound(aData)).Value = Right(Left(wksImp.Name, 13), 5)


wbkImp.Close
Set wbkImp = Nothing

ErrorHandler:
If Not wbk Is Nothing Then
Workbooks(wbkImp).Close
End If
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub

Function LastRowAll(Wks As Worksheet)
If WorksheetFunction.CountA(Wks.Cells) = 0 Then
LastRowAll = 1
Else
LastRowAll = Wks.Cells.Find(what:="*", _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
End Function

Function LastColAll(Wks As Worksheet)
If WorksheetFunction.CountA(Wks.Cells) = 0 Then
LastColAll = 1
Else
LastColAll = Wks.Cells.Find(what:="*", _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End If
End Function
Anzeige
AW: Export von csv-Daten, Datenformat
08.11.2023 09:00:38
Heli
Hi,
ich helfe gerne weiter allerdings braucht es dazu Beispieldateien wie von Oberschlumpf beschrieben sonst wäre das reines Glaskugel-lesen...

Da Du die Übernahme ja schon per Array machst kann es auch an den Quell-Daten liegen - da behelfe ich mir mit einem Export-Sheet das die Daten komplett in Texte umwandelt (auch Zahlen). Kannst Du natürlich auch im Array machen, ich bräuchte aber zumindest mal eine Beispiel-Quelldatei mit den relevanten Nummern/Daten die bei der Verarbeitung "kaputt" gehen um das beurteilen zu können.

Bis denne, Heli
Hier geht's schon schief
08.11.2023 11:41:58
Frank
Hallo,

Hier geht's schon schief:
Workbooks.Open FileName

Verwende statt dessen
Workbooks.OpenText FileName

Das bringt nicht die einzelnen Werte in einzelne Zellen, sondern eine ganze Zeile in A1, A2, A3 etc.
Das kann man dann mit "Daten"-"Text in Spalten" auf Zellen verteilen. In dem Assistenten gibt es dann auch die Möglichkeit, bestimmten Werten Formate zuzuweisen, so dass Deine langen Auftragsnummern als Texte weiterverarbeitet werden. Die Krönung des ganzen: Das lässt sich mit Makro aufzeichnen, so dass Du das im weiteren in Deinem Code verwenden kannst.

Grüsse
Frank
Anzeige
AW: Export von csv-Daten, Datenformat
06.11.2023 09:45:29
EasyD
Du meinst, bevor ich die csv-Abspeichere das Blatt entsprechend meinen Wünschen formatieren?
ok, hab ich noch nicht - werd ich mal schauen.
Dazu müsste ich schauen, was nach dem Import der xlsx für ein Zahlenformat im Blatt Import ankommt
Ich muss auch schauen, was für ein Zahlenformat nach dem Kopieren auf dem Blatt Export ankommt - denn dieses Blatt wird als csv gespeichert.

Ist ein Ansatz, ich schaue nach und gebe Rückinfo!
Danke!
AW: Export von csv-Daten, Datenformat
06.11.2023 10:23:55
EasyD
Hey Max,

hab durch getestet.

Zu Thorsten's Anmerkung unten - ja, vielleicht umständlich von mir, gebe ich zu.

ich hab die Formatierung jetzt geprüft, leider ohne Erfolgt:

Nach dem Import kommt auf dem Blatt Import das Standardformat an. Das habe ich am Ende Dieser Import-Prozedur geändert wie folgt:
Sheets("Import").Columns("E:F").NumberFormat = "0"
@Thorsten - wenn ich auf Textformat stelle, dann habe ich sofort diese wissenschaftliche Formatierung mit dem E
Anschließend diese Daten auf das Blatt Export kopieren und daran anschließend das Blatt Export als csv speichern.
Hat nix gebracht..

Ergo die Formatumstellung im Import wieder gelöscht und stattdessen am Ende der Kopier-Prozedur das Format auf dem Blatt Export geändert:
Sheets("Export").Columns("I").NumberFormat = "0"
(hier nur eine der beiden vom Blatt Import kopierten Spalten E+F = die Spalte, auf die es ankommt!)
anschließend das Blatt Export als csv speichern.
Hat nix gebracht..

Ergo auch diese Formatumstellung wieder gelöscht. Der jetzige (unveränderte) Code:

Sub Export()
'.....hier wird per Schleife und unter diversen Bedingungen alles Relevante vom Blatt Import runter kopiert auf das Blatt Export - meines Erachtens nicht relevant für's Problem
'.....Die Formatänderung an dieser Stelle (vor dem Speichern) brachte nichts, wieder gelöscht
Call SaveAsCSV
End Sub

Wäre es noch irgendwo möglich, in der folgenden Speicherung für das richtige Format zu sorgen?:

Sub SaveAsCSV()
Dim DstFileName As String, DstPfad As String
Dim Delimiter As String
Dim strZe As String
Dim lRow As Long, lCol As Integer
Dim Ze As Long, Sp As Integer
Dim ff As Integer

Dim Text As Range
Dim rngZelle As Range
Set Text = Sheets("Export").Range("G2:G" & Cells(Rows.Count, 7).End(xlUp).Row + 1)

'Sicherheitshalber im Buchungstext (Spalte G) alle Semikolons durch Kommata ersetzen
For Each rngZelle In Text
rngZelle.Value = Replace(rngZelle.Value, ";", ",")
Next rngZelle

Sheets("Export").Columns("I").NumberFormat = "0"

On Error GoTo ErrorHandler
DstPfad = Sheets("Bearbeitungshinweise").Range("G54")
DstFileName = "Datenaustausch_GebMan.csv"
Delimiter = ";"
With Sheets("Export")
lRow = .Cells.Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
lCol = .Cells.Find(what:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
ff = FreeFile
Open Replace(DstPfad & "\" & DstFileName, "\\", "\") For Output As #ff
'Zeile für Zeile lesen und schreiben ...
For Ze = 1 To lRow
For Sp = 1 To lCol - 1
strZe = strZe & .Cells(Ze, Sp) & Delimiter
Next Sp
strZe = strZe & .Cells(Ze, Sp)
Print #ff, strZe
strZe = ""
Next Ze

End With

ErrorHandler:
If Err.Number > 0 Then MsgBox "Fehler Nr. " & Err.Number & vbCrLf _
& Err.Description, vbCritical + vbOKOnly, "Das ging schief ..."
If ff > 0 Then Close #ff

MsgBox "Fertig"

'zuletzt alle zeilen löschen außer Überschrift
Sheets("Export").Rows("2:65536").ClearContents

End Sub
Anzeige
AW: Export von csv-Daten, Datenformat
06.11.2023 10:34:38
Oberschlumpf
Hi,

relevant könnte ja vielleicht sein, wenn du uns per Upload eine Excel-Bsp-Datei mit genügend Bsp-Daten und deinem Code zeigst.

Ciao
Thorsten
AW: Export von csv-Daten, Datenformat
06.11.2023 10:45:54
EasyD
Hey Thorsten,

selbstredend - mit Beispieldaten ist es einfacher.
Ich versteh das natürlich.

Aber wie in den meisten Fällen - bevor ich mich jetzt einen halben Tag hinsetze, und die vertraulichen Daten in dem Tool versuche so weit es möglich ist zu entfremden, wollte ich es erstmal auf diesem Wege versuchen.

Sehe ich es richtig - ohne Beispieldaten keine Lösung?
Auch keinen "Stups in die richtige Richtung"?
Falls ja, dann muss ich hier erstmal abbrechen, die Daten entfremden und mich hier morgen oder so nochmal melden....
Anzeige
AW: Export von csv-Daten, Datenformat
06.11.2023 11:01:43
Oberschlumpf
Hallo,

zumindest ich könnte ohne Bsp-Datei nicht helfen, da ich mich eigtl immer schwer tue, "blind" gezeigten Code zu überprüfen - blind = weil eben ohne Daten, auf die der Code verweist.

Aber....dazu gibt es ja Foren mit soo viel Schwarmwissen!
Ich erleb es immer wieder, dass auch bei anderen Problemen, zu denen nur Code gezeigt wurde, der eine oder andere Helfer trotzdem die richtige Korrektur zeigen konnte.
Vielleicht funktioniert das ja auch hier...

Ciao
Thorsten
AW: Export von csv-Daten, Datenformat
06.11.2023 11:57:42
EasyD
Sehe ich auch so!
Trotzdem Danke für's "Damit Befassen"
Vielleicht hat ja noch jmd Ideen, ich warte ab!

Anzeige
AW: Export von csv-Daten, Datenformat
06.11.2023 09:48:17
Oberschlumpf
Hi,

hmm, wenn du bei deiner Codeanpassung genau so ungenau vorgehst, wie in deinen Beschreibungen, nämlich...
"...was nach dem Import der xlsx für ein Zahlenformat im Blatt Import ankommt..." - das fette Import soll bestimmt Export heißen, oder?!
...dann wirds bis zu ner Lösung, mit der auch du zufrieden bist, noch etwas länger dauern.

Ciao
Thorsten
AW: Export von csv-Daten, Datenformat
06.11.2023 10:03:25
EasyD
Hey Thorsten,

danke für das Feedback - ich antworte auf Max seinen Post.

Grüße

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige