Entwickler-Ecke
Datenbanken - excel2dbf
D. Annies - Mo 26.09.11 20:22
Titel: excel2dbf
Hi Delpher,
(wie) kann ich Excel dazu bringen, eine größere Feldbreite als 12 Zeichen zu verwenden, wenn ich eine Excel-Datei im DBF-Format abspeichere??
Ideal wäre es ja, wenn Excel die maximale Feldbreite iwi erkennt.
Danke für eine Idee,
Detlef
D. Annies - Do 29.09.11 07:04
Jo, geht.
Danke, Benny!
D. Annies - Do 29.09.11 20:17
Autsch, jetzt habe ich ein (das) Umlauteproblem!
Wie kann man das denn lösen??
Gruß, Detlef
BenBE - Do 29.09.11 20:19
Die CSV in einem Programm, was Umlaute konvertieren kann öffnen, umarbeiten und Umlaute im richtigen Zeichensatz speichern.
AWobei der den Zeichensatz für's Speichern doch anbieten sollte?
D. Annies - Fr 30.09.11 21:08
Ja, das wäre schön, aber ich sehe nur die Möglichkeit einer FindReplace-Routine, selbstgeschrieben.
Gibt's doch sicherlich schon, oder? <-- Wer hat so etwas schon codiert?
Detlef
BenBE - Sa 01.10.11 02:24
Also jeder gute Editor, der nicht Notepad heißt, kann dir den Zeichensatz konvertieren. Also z.B. Notepad++, PHPEdit, ...
D. Annies - Sa 01.10.11 13:02
Na, ich will nicht über CSV gehen, deshalb folgender Ansatz (bisher):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TBuchMain.Umlautekonvertieren1Click(Sender: TObject); var i, n : integer; begin TbSchueler.first; i := 0; repeat inc(i); for n := 0 to TbSchueler.FieldCount-1 do begin if pos(chr(132), TbSchueler.fields[n].AsString) <> 0 then begin showmessage(inttostr(i) + ' * ' + chr(228) + ' ** ' + TbSchueler.fields[n].AsString); TbSchueler.edit; TbSchueler.fields[n].AsString := stringreplace(TbSchueler.fields[n].AsString, chr(132), chr(228), [rfReplaceAll]); TbSchueler.Post; showmessage('Person wurde geändert'); end; end; TbSchueler.Next; until TbSchueler.Eof; showmessage('Konvertierung ist beendet'); lade_Tabelle(TbSchueler, buchDM_Dlg.opendialog1.filename, listbox11.items[listbox11.itemindex]); DBGrid1.Refresh; showmessage('Neue Tabelle ist geladen'); end; |
In einem Feld sollte der Inhalt "Büro" stehen, aber ich sehe (unkonvertiert) nur "Bro".
Welches Ascii-Zeichen verbirgt sich denn dahinter?
Gruß, Detlef
BenBE - Mo 03.10.11 14:04
Das sieht nach einem Zeichensatz-Problem aus. Welche Delphi-Version? Mit den Tnt-Komponenten schon probiert, was sich da machen lässt?
D. Annies - Mo 03.10.11 14:21
D6E, aber ich habe alles mögliche schon hinter mir. Tnt bringt auch nichts.
Es ist (auch) ein Excel-Problem!
Na, ich suche auch weiter,
Gruß, Detlef
BenBE - Mo 03.10.11 15:03
Versuche mal direkt WideStrings beim Zugriff auf OLE; sonst spcukt Dir da die RTL von Delphi beim Konvertieren der Strings nach AnsiString dazwischen.
D. Annies - Mo 03.10.11 19:12
So, jetzt ist Licht am Ende des Tunnels! Der Code ist wohl noch verbesserbar:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75:
| procedure TBuchMain.Umlautekonvertieren1Click(Sender: TObject); var i, n, k : integer; gauml, gouml, guuml, kauml, kouml, kuuml, szlig : boolean; begin TbSchueler.first; i := 0; repeat inc(i); for n := 0 to TbSchueler.FieldCount-1 do begin for k := 1 to length(TbSchueler.fields[n].AsString) do begin gauml := false; gouml := false; guuml := false; kauml := false; kouml := false; kuuml := false; szlig := false; if (pos(chr(142), TbSchueler.fields[n].AsString[k]) <> 0) then gauml := true; if (pos(chr(153), TbSchueler.fields[n].AsString[k]) <> 0) then gouml := true; if (pos(chr(154), TbSchueler.fields[n].AsString[k]) <> 0) then guuml := true; if (pos(chr(132), TbSchueler.fields[n].AsString[k]) <> 0) then kauml := true; if (pos(chr(148), TbSchueler.fields[n].AsString[k]) <> 0) then kouml := true; if (pos(chr(129), TbSchueler.fields[n].AsString[k]) <> 0) then kuuml := true; if (pos(chr(225), TbSchueler.fields[n].AsString[k]) <> 0) then szlig := true;
if gauml then begin TbSchueler.edit; TbSchueler.fields[n].AsString := stringreplace(TbSchueler.fields[n].AsString, chr(142), chr(196), [rfReplaceAll]); TbSchueler.Post; end; if gouml then begin TbSchueler.Edit; TbSchueler.fields[n].AsString := stringreplace(TbSchueler.fields[n].AsString, chr(153), chr(214), [rfReplaceAll]); TbSchueler.Post; end; if guuml then begin TbSchueler.Edit; TbSchueler.fields[n].AsString := stringreplace(TbSchueler.fields[n].AsString, chr(154), chr(220), [rfReplaceAll]); TbSchueler.post; end; if kauml then begin TbSchueler.Edit TbSchueler.fields[n].AsString := stringreplace(TbSchueler.fields[n].AsString, chr(132), chr(228), [rfReplaceAll]); TbSchueler.Post; end; if kouml then begin TbSchueler.Edit; TbSchueler.fields[n].AsString := stringreplace(TbSchueler.fields[n].AsString, chr(148), chr(246), [rfReplaceAll]); TbSchueler.Post end; if kuuml then begin TbSchueler.Edit; TbSchueler.fields[n].AsString := stringreplace(TbSchueler.fields[n].AsString, chr(129), chr(252), [rfReplaceAll]); TbSchueler.Post; end; if szlig then begin TbSchueler.Edit; TbSchueler.fields[n].AsString := stringreplace(TbSchueler.fields[n].AsString, chr(225), chr(223), [rfReplaceAll]); TbSchueler.Post; end; end; showmessage('Schüler wurde geändert'); end; TbSchueler.Next; until TbSchueler.Eof; showmessage('Konvertierung ist beendet, Tabelle ' + buchDM_Dlg.opendialog1.filename + 'wird geladen'); lade_Tabelle(TbSchueler, buchDM_Dlg.opendialog1.filename, listbox11.items[listbox11.itemindex]); showmessage('hi'); qSchuelerSort(self); DBGrid1.Refresh; showmessage('Tabelle ist geladen'); end; |
Gruß, Detlef
D. Annies - Di 04.10.11 10:38
Hi, Narses,
so, hab's gelesen, das Problem ist tatsächlich die Codierung von ASCII nach ANSI.
Ich gucke gerade - es gibt ja noch weitere Sonderzeichen ...
cu, Detlef
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!