Excel als CSV speichern.

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

BJelinek hat geschrieben: Do, 18. Nov 2021 23:23 Hallo Rolf,

man kann doch Jimmys Methode mit Huberst kombinieren.

Immer eine Anzahl Zeilen z.B. 1000 in array einlesen und mit fwrite speichern
dann die nächsten Zeilen in array einlesen und mit fwrite speichern

so lange bis keine Zeilen mehr vorhanden.

Die Gesamtzahl der Zeilen lässt sich ja ermitteln.

Das könnte das 32bit Speicherproblem umgehen, wie bei Hubert mit großen Dateien.


Ich habe aber noch nicht verstanden, was Du willst.

Du hast meherere Excel-Dateien.

Was soll mit den Daten geschehen?

- excel in csv-Dateien wandeln

- excel in dbf-Dateien wandeln
Dies könnte man auch mit LibreOffice machen, da kann man Excel als DBF speichern.

- excel-Daten im Programm verarbeiten

- csv-Dateien in andere csv-Dateien umwandeln
Hallo Bernd.

Ja, mehrere Excel Tabellen, die jeweils in eine DBF zur Weiterverarbeitung gespeichert werden.
Diese CSV Dateien werden beim Export von Excel teilweise mit Anführunszeichen versorgt. Z. B., wenn ein ";" im Feld steht.
Dieses soll ja eigentlich der Feldtrenner sein.
Schöner wird es, wenn " und ; in einem Feld stehen.

Es gibt ein Tool "XLLS Converter". Das funktioniert gut, steigt aber bei den großen Dateien aus.
VG Rolf
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel als CSV speichern.

Beitrag von AUGE_OHR »

hi,
DerRolf hat geschrieben: Fr, 19. Nov 2021 8:35 Problem ist, dass ich momentan auf die Kombi ";"" abfrage, und ändere.
Das ist wie gesagt zu langsam.
sag mal : "was" passiert mit den CSV Dateien :!: "wo" werden die wieder "eingelesen" :?:

wenn man den "Delimiter" ersetzen würde "müsste" die App die es einlesen soll ja "verstehen"

---

Damit stellt sich die Frage ob es eine CSV sein "muss" :?:

gibt es für Excel nicht ein Macro was dir eine JSON Datei erstellen kann :idea:
auch XML wäre ja möglich ... wenn die "andere Apps" es "lesen" kann ...

---

p.s.
man kann auch eine CSV Datei mit "fester Länge", ohne "Delimiter", produzieren (und weiter verarbeiten)
gruss by OHR
Jimmy
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

AUGE_OHR hat geschrieben: Fr, 19. Nov 2021 10:33 hi,

sag mal : "was" passiert mit den CSV Dateien :!: "wo" werden die wieder "eingelesen" :?:

wenn man den "Delimiter" ersetzen würde "müsste" die App die es einlesen soll ja "verstehen"

---

Damit stellt sich die Frage ob es eine CSV sein "muss" :?:

gibt es für Excel nicht ein Macro was dir eine JSON Datei erstellen kann :idea:
auch XML wäre ja möglich ... wenn die "andere Apps" es "lesen" kann ...

---

p.s.
man kann auch eine CSV Datei mit "fester Länge", ohne "Delimiter", produzieren (und weiter verarbeiten)
Hi.
Die CSV wird in eine DBF eingelesen.
JSON Format kenne ich so nicht. Auch beim XML Format wird es schwierig.
CSV in fester Länge wird auch schwierig, da einzelne Felder mehr als 2000 Zeichen beinhalten.

Den anderen Delimiter habe ich getestet. Excel schreibt aber trotzdem seine Anführungszeichen in die CSV.
VG Rolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Excel als CSV speichern.

Beitrag von Martin Altmann »

Rolf,
ist doch auch korrekt! Zeichenfelder werden in „ eingefasst, Felder selber durch ; getrennt.
Du kannst die so erstellte csv wie eine dbf in Xbase++ öffnen und die Sätze in eine dbf importieren. Musst nur die Angaben korrekt setzen (DELDBE_*)

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel als CSV speichern.

Beitrag von AUGE_OHR »

hi,
DerRolf hat geschrieben: Fr, 19. Nov 2021 10:51 Die CSV wird in eine DBF eingelesen.
und wie wäre es wenn du, statt der *.CSV, gleich eine *.DBF verschickst ... :-"

---

die Array Methode ist ja die schnellst aber du "könntest" auch "jede Cell lesen"
das kann man direkt mit Excel machen oder mit ADO

---

ActiveX Befehle unter Xbase++ sind nicht schnell ... du solltest "DispHelper" in Ot4Xb ausprobieren.
"DispHelper" kann keine Events "empfangen" aber ohne ist er viel schneller.
wenn du dann mit FELIDGET() / FIELDPUT() arbeitest wird das APPEND BLANK am längsten dauern.
gruss by OHR
Jimmy
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

Martin Altmann hat geschrieben: Fr, 19. Nov 2021 11:23 Rolf,
ist doch auch korrekt! Zeichenfelder werden in „ eingefasst, Felder selber durch ; getrennt.
Du kannst die so erstellte csv wie eine dbf in Xbase++ öffnen und die Sätze in eine dbf importieren. Musst nur die Angaben korrekt setzen (DELDBE_*)

Viele Grüße,
Martin
Hallo Martin.
Eben nicht. Schau doch mal mein Beispiel.
VG Rolf
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

AUGE_OHR hat geschrieben: Fr, 19. Nov 2021 12:01 hi,

und wie wäre es wenn du, statt der *.CSV, gleich eine *.DBF verschickst ... :-"

---
Wenn du mir sagst wie, dann knie ich den ganzen Tag nieder... :lol:
AUGE_OHR hat geschrieben: Fr, 19. Nov 2021 12:01
die Array Methode ist ja die schnellst aber du "könntest" auch "jede Cell lesen"
das kann man direkt mit Excel machen oder mit ADO

---
Wie sollte das direkt mit Excel gehen?
AUGE_OHR hat geschrieben: Fr, 19. Nov 2021 12:01
ActiveX Befehle unter Xbase++ sind nicht schnell ... du solltest "DispHelper" in Ot4Xb ausprobieren.
"DispHelper" kann keine Events "empfangen" aber ohne ist er viel schneller.
wenn du dann mit FELIDGET() / FIELDPUT() arbeitest wird das APPEND BLANK am längsten dauern.
Wo bekomme ich Infos über den "Disphelper"

Das Problem ist nicht das Befüllen der DBF, sondern die CSV zu bereinigen.
VG Rolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Excel als CSV speichern.

Beitrag von Martin Altmann »

Rolf,
ich sehe von Dir kein Beispiel für denImport der .csv in .dbf
Ein Beispiel dafür:

Code: Alles auswählen

procedure import()
local i
select 1
use xallhund
zap
select 2
DbeSetDefault( "DELDBE" )
DbeInfo( COMPONENT_DATA, DELDBE_DELIMITER_TOKEN, '"' )
DbeInfo( COMPONENT_DATA, DELDBE_FIELD_TOKEN, ';' )
use ( textpfad + "\BERLIN01.CSV" ) via ("DELDBE")
go top
do while .not. eof()
	if .not. ( empty( field->field5 ) .or. empty( field->field6 ) )
		select 1
		append blank
		select 2
		replace xallhund->GESCHLECHT with left( field->field3, 1 )
		replace xallhund->HUNDENAMEN with alltrim( field->field4 )
		replace xallhund->ZUCHTBUCH with alltrim( field->field5 )
		i := dtos( ctod( field->field6 ) )
		replace xallhund->WURFDATUM with right( i, 2 ) + substr( i, 5 ,2 ) + left( i, 4 )
		replace xallhund->PRUEFUNG1 with alltrim( field->field7 )
		replace xallhund->VATER with alltrim( field->field8 )
		replace xallhund->MUTTER with alltrim( field->field9 )
		if ( ( upper( alltrim( field->field10 ) ) == "JA" ) .and. ( empty( field->field11 ) ) )
			replace xallhund->ZUECHTER with alltrim( alltrim( field->field14 ) + " " + alltrim( field->field15 ) )
		else
			replace xallhund->ZUECHTER with alltrim( alltrim( field->field12 ) + " " + alltrim( field->field11 ) )
		endif
		replace xallhund->BESITZERVO with alltrim( field->field14 )
		replace xallhund->BESITZERNA with alltrim( field->field15 )
		replace xallhund->STRASSE with alltrim( field->field17 )
		replace xallhund->NATION with alltrim( field->field18 )
		replace xallhund->PLZ with alltrim( field->field19 )
		replace xallhund->ORT with alltrim( field->field20 )
	endif
	skip
enddo
use
select 1
DbeSetDefault( "DBFNTX" )
sort on zuchtbuch to (datenpfad + "xalldog.dbf" )
use
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

Martin Altmann hat geschrieben: Fr, 19. Nov 2021 11:23 Rolf,
ist doch auch korrekt! Zeichenfelder werden in „ eingefasst, Felder selber durch ; getrennt.
Du kannst die so erstellte csv wie eine dbf in Xbase++ öffnen und die Sätze in eine dbf importieren. Musst nur die Angaben korrekt setzen (DELDBE_*)

Viele Grüße,
Martin
Ich habe es mal visuell dargestellt.
Einmal Excel, und dann die CSV.
temp.pdf
(144.54 KiB) 172-mal heruntergeladen
VG Rolf
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Excel als CSV speichern.

Beitrag von Jan »

Anführungszeichen in zu exportierenden Zeichenketten gehören ja auch verboten.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

Jan hat geschrieben: Fr, 19. Nov 2021 13:32 Anführungszeichen in zu exportierenden Zeichenketten gehören ja auch verboten.

Jan
Ja, Jan. Das habe ich auch gesagt!
Aber die Kreativität der Erfasser ist grenzenlos! :lol:

Da habe ich aber leider keinen Einfluss drauf.
VG Rolf
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Excel als CSV speichern.

Beitrag von Jan »

Rolf,

ich mach da immer ein StrTran(xxx, '"', "") drauf bei Exporten etc. Da bin ich inzwischen ziemlich gnadenlos.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

Jan hat geschrieben: Fr, 19. Nov 2021 14:35 Rolf,

ich mach da immer ein StrTran(xxx, '"', "") drauf bei Exporten etc. Da bin ich inzwischen ziemlich gnadenlos.

Jan
Wäre ne Maßnahme. Aber das sind dann die ";". :D
Die machenm dann auch keinen Spaß mehr, wenn mann nach ; separiert.
VG Rolf
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Excel als CSV speichern.

Beitrag von Wolfgang Ciriack »

Ich verstehe immer noch nicht den Umweg über .csv.
Warum nicht die .xlsx-Datei direkt in ein Array einlesen und dann verarbeiten ? Sind diese zu groß, dass das nicht klappt ?

Code: Alles auswählen

oWorkBook := oExcel:WorkBooks:Open(<xlsdatei>)
aValues   := oWorkBook:WorkSheets(1):UsedRange:Value
* NIL -Values entfernen
for i := 1 to l
   for ii := 1 to len(aValues[i])
	if aValues[i, ii] == NIL
           aValues[i, ii] := ""
	endif
   next
next
Viele Grüße
Wolfgang
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Excel als CSV speichern.

Beitrag von HaPe »

Hallo Rolf !
Ich verstehe immer noch nicht den Umweg über .csv.
Wolfgang hat mich auf die Idee gebracht ...

Ich habe mir vor 8 Jahren eine Funktion geschrieben um jede XLS/XSLX-Datei in eine DBF zu schreiben.
Dabei gehe ich über eine Text-Datei aber nicht über eine CSV-Datei.
Ich speichere die Felder getrennt mit Tabulatoren und lese dann diese Textdatei ein: TXT-Format (FileFormat = 20 = xlTextWindows)
Das funktioniert bei mir zuverlässig.
--
Hans-Peter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel als CSV speichern.

Beitrag von brandelh »

Hallo,

meine HBTextReader() Klasse ist in der Wissensbank:

:arrow: https://www.xbaseforum.de/viewtopic.php?f=16&t=7961

das Problem ist, dass meine Klasse keine Zeilenschaltungen innerhalb einer Zeile zulässt, einige CSV Dateien von Excel enthalten solche.
Ansonsten weiß ich nicht was du alles mit der Datei anstellen willst, ich lese große Textdateien ein, welche je Datenfeld eine Zeile enthalten, also etwa 130 Felder je Datensatz und das bei 360.000 Datensätzen, also über einer Million Zeilen.

Ich lese diese Textdateien in eine DBF ein, aber das ist im Prinzip egal, man kann sie auch in eine andere CSV schreiben.

Hier ein verkürztes Verarbeitungsprotokoll:

Code: Alles auswählen

18.10.2021 13:26:10 - Datensätze einlesen, bitte warten ...
18.10.2021 13:59:38 - Es wurden keine Fehler gemeldet.
18.10.2021 13:59:38 - 361.198 Datensätze wurden eingelesen (Dauer: 33 min).
                                        dies entspricht 35.758.603 Zeilen bzw. 513.320.956 Byte.
Also kurz gesagt, 513 MB Datendatei, 361.198 Datensätze (zusammengebaut und in DBF geschrieben) dauert etwa 33 Minuten.

Durch das Einlesen mit meiner Klasse ist man unabhängig von der Dateigröße, solange man die max. Dateigröße nicht überschreitet.
Alle Lösungen die den ganzen Bestand auf einmal in den RAM holen sind schneller (memoread()), wenn es nicht wegen Speichermangel schief geht.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel als CSV speichern.

Beitrag von AUGE_OHR »

hi,
DerRolf hat geschrieben: Fr, 19. Nov 2021 12:41
AUGE_OHR hat geschrieben: Fr, 19. Nov 2021 12:01 das kann man direkt mit Excel machen oder mit ADO
Wie sollte das direkt mit Excel gehen?
DerRolf hat geschrieben: Fr, 19. Nov 2021 12:41
AUGE_OHR hat geschrieben: Fr, 19. Nov 2021 12:01 ActiveX Befehle unter Xbase++ sind nicht schnell ... du solltest "DispHelper" in Ot4Xb ausprobieren.
Wo bekomme ich Infos über den "Disphelper"
DerRolf hat geschrieben: Fr, 19. Nov 2021 12:41 Wenn du mir sagst wie, dann knie ich den ganzen Tag nieder... :lol:
Das Problem ist nicht das Befüllen der DBF, sondern die CSV zu bereinigen.
für ADO habe ich kein Xbase++ Sample ... nur harbour HMG
HB_ADO_EXCEL.ZIP
(8.77 KiB) 162-mal heruntergeladen
da aber ActiveX-OOP-Code 100% kompatible ist sollte euch "der" Code-Teil zum lesen/schreiben auch unter Xbase++ helfen.

btw. ADO kann man, statt ODBC, auch für SQl-Server nutzen !

bei ADO reduzieren sich die ActiveX Aufrufe

Code: Alles auswählen

   objRS := CreateObject( "ADODB.Recordset" )
   // go top
   objRS:MoveFirst()          
   DO WHILE .NOT. objRS:EOF()
      arrLine := {}
      FOR jj := 0 TO objRS:Fields:Count - 1
         xValue := objRS:Fields( jj ):Value()
         // do some Code IF EMPTY(xValue)
         AADD( arrLine, xOUT )
      NEXT
      // instead of Array. here you can use DBF to APPEND Data or write a CSV
      AADD( aGridData, arrLine )
      //Move to the next row
      objRS:MoveNext()
   ENDDO
--

"Disphelper" ist inzwischen Bestandteil von Ot4XB
das "Original" hat auch diverse Beispiele zur Anwendung
disphelper_081.zip
(175.98 KiB) 162-mal heruntergeladen
grob gesagt arbeitet "Disphelper" nach "Windows-Art" mit Pointer statt Object
da man eh mit Variablen arbeitet kommt man schnell hinter die Ot4Xb Syntax die man verwenden muss.
dhExcel.zip
(53.54 KiB) 160-mal heruntergeladen
der Vorteil ist die Geschwindigkeit ... teilweise 400 % gegenüber XbpActiveXControl()

! Note : die "DispHpr.dll" wird nicht benötigt für die "neue" Ot4Xb Syntax
statt @dh:dhPutValue(...) => _dh_PutValue(...)

---

in beiden Fällen "schreibst" du die *.CSV per FWRITE() oder überträgst die Daten per FIELDPUT() in eine DBF
bei DBF ohne ( :!: ) Index (kann man später aufbauen)

p.s. du hättest all die "Probleme" nicht wenn dein Excel Sheet nicht solche Zeichen hätte ... ein "Problem" sollte man an der Quelle korrigieren.
gruss by OHR
Jimmy
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: Excel als CSV speichern.

Beitrag von BJelinek »

Hallo Rolf

Jimmy hat Recht. Warum ersetzt man unliebsame Zeichen nicht in Excel bevor man aus Excel speichert.

Die Syntax erhält man durch Makroaufzeichnung, die man übersetzen kann.
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

HaPe hat geschrieben: Fr, 19. Nov 2021 18:51 Hallo Rolf !
Ich verstehe immer noch nicht den Umweg über .csv.
Wolfgang hat mich auf die Idee gebracht ...

Ich habe mir vor 8 Jahren eine Funktion geschrieben um jede XLS/XSLX-Datei in eine DBF zu schreiben.
Dabei gehe ich über eine Text-Datei aber nicht über eine CSV-Datei.
Ich speichere die Felder getrennt mit Tabulatoren und lese dann diese Textdatei ein: TXT-Format (FileFormat = 20 = xlTextWindows)
Das funktioniert bei mir zuverlässig.
Hallo.
Auch wenn in den Feldern ";" vorkommen?
Wie unterscheidest du zwischen Feldtrenner und Inhalt?
VG Rolf
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

BJelinek hat geschrieben: Sa, 20. Nov 2021 8:43 Hallo Rolf

Jimmy hat Recht. Warum ersetzt man unliebsame Zeichen nicht in Excel bevor man aus Excel speichert.

Die Syntax erhält man durch Makroaufzeichnung, die man übersetzen kann.
Weil bei diesen großen Excel Dateien die Verarbeitrung zu langsam ist.
Das hatte ich vor Jahren als erstes probiert.
Wenn das funktionieren würde, bräuchte ich noch nicht einmal die CSV noch die Zeichen entfernen, sondern könnte die Felder sofort in die DBF schreiben...
VG Rolf
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

AUGE_OHR hat geschrieben: Sa, 20. Nov 2021 8:01 hi,
DerRolf hat geschrieben: Fr, 19. Nov 2021 12:41
p.s. du hättest all die "Probleme" nicht wenn dein Excel Sheet nicht solche Zeichen hätte ... ein "Problem" sollte man an der Quelle korrigieren.
Das ist richtig.
Aber leider nicht möglich. Da alle vorhandenen Artikestämme kontrolliert werden müssten, unf ggf. geändert werden.
Es handelt sich um 130 verschiedene Lieferanten, die fast ausschließlich riesige Unternehmen sind, sich nur sehr schwer bewegen.

Dann das Problem der Kontrolle.
Ich muss es auch dann noch kontrollieren, da ansonsten die Export Datei kaputt ist.

Danlke für die Tipps. Ich versuche es weiter.
VG Rolf
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Excel als CSV speichern.

Beitrag von HaPe »

Hallo Rolf !
Ich speichere die Felder getrennt mit Tabulatoren und lese dann diese Textdatei ein: TXT-Format (FileFormat = 20 = xlTextWindows)
Auch wenn in den Feldern ";" vorkommen?
Ja.
Wie unterscheidest du zwischen Feldtrenner und Inhalt?
Falls der Lieferant der Excel-Tabelle entgegen der Vereinbarung, doch Tabs in Zellen eingefügt hat, putzt die VBA-Funktion Clean alle nichtdruckbaren Zeichen aus den Zellen.
--
Hans-Peter
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 76
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 3 Mal

Re: Excel als CSV speichern.

Beitrag von DerRolf »

HaPe hat geschrieben: Di, 23. Nov 2021 10:24
Falls der Lieferant der Excel-Tabelle entgegen der Vereinbarung, doch Tabs in Zellen eingefügt hat, putzt die VBA-Funktion Clean alle nichtdruckbaren Zeichen aus den Zellen.
Hallo Hape.
Die Funktion "Clean" löscht die Zeichen aus der Excel Tabelle? Auch die Semikolon?
Kannst du mir bitte zeigen, wie das funktioniert?
Würde das auch bei so großen Dateien funktionieren?

Danke Dir.
VG Rolf
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Excel als CSV speichern.

Beitrag von HaPe »

Hallo Rolf !
...putzt die VBA-Funktion Clean alle nichtdruckbaren Zeichen aus den Zellen.
Die Funktion "Clean" löscht die Zeichen aus der Excel Tabelle? Auch die Semikolon?
Die Funktion Clean löscht alle nichtdruckbare Zeichen aus einer Zelle: https://docs.microsoft.com/de-de/office ... tion.clean
Kannst du mir bitte zeigen, wie das funktioniert?
In einer Schleife über alle Zellen die gefüllt sind => bitte Google bemühen, da mein VFP-Klassen-Code nicht Xbase++-kompatibel ist.
Hier gibt es ein gutes VBA-Beispiel: https://www.thespreadsheetguru.com/the- ... h-vba-code
Würde das auch bei so großen Dateien funktionieren?
Bei mir sind die zu verarbeitenden Excel-Tabellen maximal 5 MB groß.
Wenn Sie bei dir viel größer sind, wird das auch funktionieren, aber halt sehr langsam ...
--
Hans-Peter
Antworten