Konvertierung von xls in dbf
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Konvertierung von xls in dbf
Hallo. Ich bin neu hier. Ich heiße Stefan, komme aus Senftenberg und bin Fi (Ae) erstes Lehrjahr. Und gleich meine erste Frage. Bin noch blutiger Anfänger, deswegen....
Wie kann ich durch ein paar Zeilen Xbase-Code den Inhalt einer Exceldatei in
einer dbf speichern, die dann auch weiterverwendet werden kann?
Wie kann ich durch ein paar Zeilen Xbase-Code den Inhalt einer Exceldatei in
einer dbf speichern, die dann auch weiterverwendet werden kann?
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hallo,
stelle doch bitte deine persönliche Vorstellung in den Vorstellungsthread.
Zu der Frage, also wenn du die 1.90 hast, kannst du ActiveX nutzen.
Allerdings kenne ich mich damit nicht so aus. Im Samples Ordner gibt es einen Ordner Activex - dort macht das Beispielprogramm excel2.prg genau das was du willst. DBF Felder in Excel-Arbeitsblätter eintragen und speichern. Excel1.prg nutzt die Importfunktion, die bestimmt schneller ist.
Ein anderer Weg wäre ODBC, dafür braucht man aber entweder die Prof. Subscription oder SQLexpress.
Mit der Suchen Funktion des Forums erhälst du unter ActiveX oder Excel eine Menge Fundstellen, denn das Thema war schon öffterst da
stelle doch bitte deine persönliche Vorstellung in den Vorstellungsthread.
Zu der Frage, also wenn du die 1.90 hast, kannst du ActiveX nutzen.
Allerdings kenne ich mich damit nicht so aus. Im Samples Ordner gibt es einen Ordner Activex - dort macht das Beispielprogramm excel2.prg genau das was du willst. DBF Felder in Excel-Arbeitsblätter eintragen und speichern. Excel1.prg nutzt die Importfunktion, die bestimmt schneller ist.
Ein anderer Weg wäre ODBC, dafür braucht man aber entweder die Prof. Subscription oder SQLexpress.
Mit der Suchen Funktion des Forums erhälst du unter ActiveX oder Excel eine Menge Fundstellen, denn das Thema war schon öffterst da
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: aus excel exportieren
Hi,stevie hat geschrieben:das geht nicht, die db war, egal ob dbase 2, 3 oder 4 nicht mit xtree lesbar
ich kenne jetzt xTree nicht, aber ein häufiger Fehler liegt in der sehr flexiblen Kennzeichnung der Überschriften in der ersten Zeile unter Excel (oder auch 123 ). Eine alte DBF ist da recht konservativ.
Diese werden ja als Feldnamen übernommen und da knallt es halt wenn 2 den gleichen haben oder Sonderzeichen drinn sind, oder mehr als 10 Zeichen etc....
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Re: aus excel exportieren
xtree liest dbase3 dateien und zeigt sie an.brandelh hat geschrieben: ich kenne jetzt xTree nicht, aber ein häufiger Fehler liegt in der sehr flexiblen Kennzeichnung der Überschriften in der ersten Zeile unter Excel (oder auch 123 ). Eine alte DBF ist da recht konservativ.
Diese werden ja als Feldnamen übernommen und da knallt es halt wenn 2 den gleichen haben oder Sonderzeichen drinn sind, oder mehr als 10 Zeichen etc....
Ich nutze nun seit gut 6 Stunden hier und suche eine funktionierende Lösung und wäre ich daher sehr verbunden, wenn ihr mir mit nem konkreten Beispiel helfen könnt. Verzweifel nämlich langsam. Beispielsweise das was hier im Forum steht, scheitert schon daran, dass mir die Includes excel.ch und activex.ch fehlen. Egal wie, hauptsache es klappt.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Stevie.
Wenn es wirklich eine einmalige Sache ist:
Feldnamen (also Tabellenüberschriften) in Großschreibung, maximal zehn Zeichen, keine Doppelungen (sicherheitshalber: FELD1, FELD2, FELD3 usw.). Alle Feldlängen optimieren, also die gesamte Tabelle wählen und "optimale Spaltenbreite" aufrufen. Sonst schneidet Excel beim Export Daten ab. Dann nach Dbase 3 (!) exportieren. Diese Datei sollte sich in jedem Fall lesen lassen, es sei denn, Du hast Spalten mit mehr als 255 Zeichen. Memo funzt aus Excel heraus nicht.
Wenn es keine einmalige Sache ist:
Auf 1.9 umsteigen oder Dir - das gibt es inzwischen als Freeware, ich weiß aber leider nicht, wo - JazzAge besorgen. Das ist eine Active-X-Library für Xbase (< 1.9). Dann allerdings wird's richtig kompliziert.
Wenn es wirklich eine einmalige Sache ist:
Feldnamen (also Tabellenüberschriften) in Großschreibung, maximal zehn Zeichen, keine Doppelungen (sicherheitshalber: FELD1, FELD2, FELD3 usw.). Alle Feldlängen optimieren, also die gesamte Tabelle wählen und "optimale Spaltenbreite" aufrufen. Sonst schneidet Excel beim Export Daten ab. Dann nach Dbase 3 (!) exportieren. Diese Datei sollte sich in jedem Fall lesen lassen, es sei denn, Du hast Spalten mit mehr als 255 Zeichen. Memo funzt aus Excel heraus nicht.
Wenn es keine einmalige Sache ist:
Auf 1.9 umsteigen oder Dir - das gibt es inzwischen als Freeware, ich weiß aber leider nicht, wo - JazzAge besorgen. Das ist eine Active-X-Library für Xbase (< 1.9). Dann allerdings wird's richtig kompliziert.
Herzlich,
Tom
Tom
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Das ist doch so schon kompliziert genug. Ich meine nicht mal das Beispiel bei ODBCDBE funktioniert. Er bekommt angeblich keine Verbindung zum DBE was aber direkt dort aufgerufen wird. Für 1,9 werd ich meinen Chef wohl kaum überreden können.Tom hat geschrieben:Hallo, Stevie.
Wenn es wirklich eine einmalige Sache ist:
Feldnamen (also Tabellenüberschriften) in Großschreibung, maximal zehn Zeichen, keine Doppelungen (sicherheitshalber: FELD1, FELD2, FELD3 usw.). Alle Feldlängen optimieren, also die gesamte Tabelle wählen und "optimale Spaltenbreite" aufrufen. Sonst schneidet Excel beim Export Daten ab. Dann nach Dbase 3 (!) exportieren. Diese Datei sollte sich in jedem Fall lesen lassen, es sei denn, Du hast Spalten mit mehr als 255 Zeichen. Memo funzt aus Excel heraus nicht.
Hab ich alles gemacht. Keine Chance.
Wenn es keine einmalige Sache ist:
Auf 1.9 umsteigen oder Dir - das gibt es inzwischen als Freeware, ich weiß aber leider nicht, wo - JazzAge besorgen. Das ist eine Active-X-Library für Xbase (< 1.9). Dann allerdings wird's richtig kompliziert.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Stevie.
Die ODBCDBE-Beispiele muß man anpassen (Text am Anfang der Beispiele lesen!). Und Du mußt ODBC aktiv haben. Zudem muß es eine Benutzer-Datenquelle (DSN) geben, die namentlich im Beispiel angesprochen wird (dort steht "Excel Files", aber eine deutsche ODBC kennt standardmäßig "Excel-Dateien"). Derlei stellst Du in der ODBC-Datenquellen-Administration ein (Ausführen -> ODBCAD32.EXE).
Die ODBCDBE-Beispiele muß man anpassen (Text am Anfang der Beispiele lesen!). Und Du mußt ODBC aktiv haben. Zudem muß es eine Benutzer-Datenquelle (DSN) geben, die namentlich im Beispiel angesprochen wird (dort steht "Excel Files", aber eine deutsche ODBC kennt standardmäßig "Excel-Dateien"). Derlei stellst Du in der ODBC-Datenquellen-Administration ein (Ausführen -> ODBCAD32.EXE).
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hi,
wenn du es nur sporadisch brauchst, kannst du auch die DEMO von SQLExpress nutzen. Der Link steht auch hier in der Rubrik Links ...
Da ist ein Beispiel für Excel und 1.82 über ODBC Dabei.
Aber beschreibe doch mal genauer dein Problem.
Excel kann wenn man einiges beachtet ganz gut DBF exportieren.
wenn du es nur sporadisch brauchst, kannst du auch die DEMO von SQLExpress nutzen. Der Link steht auch hier in der Rubrik Links ...
Da ist ein Beispiel für Excel und 1.82 über ODBC Dabei.
Aber beschreibe doch mal genauer dein Problem.
Excel kann wenn man einiges beachtet ganz gut DBF exportieren.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Zugriff auf Excel
Hallo
Der odbcdbe Hilfe in xbase zufolge müsste man mit dem Code hier auf Excel zugreifen können, kann aber nicht.
#include "Odbcdbe.ch"
PROCEDURE Main
LOCAL cConnect, oSession
cConnect := "DBE=ODBCDBE"
cConnect += ";DRIVER=Microsoft Excel Driver (*.xls)"
cConnect += ";FIL=excel 9.0"
cConnect += ";UID=Admin"
cConnect += ";DBQ=D:\XBASE\testdb.xls"
oSession := DacSession():new( cConnect )
IF oSession:isConnected()
USE Customer
Browse()
USE
oSession:disconnect()
ENDIF
RETURN
Wenn ich nämlich unter if osession... eine Meldung ausgeben lasse, wird die niemals angezeigt. Wenn ich das richtig gesehen habe, ist die Bedingung erfüllt, wenn auf testdb.xls zugegriffen werden konnte. Was läuft da falsch? Odbc-Treiber sind installiert und laufen. In der Excel-Datei steht eine Tabelle mit dem Namen Customer und der Bereich mit den Daten heißt auch Customer.
Der odbcdbe Hilfe in xbase zufolge müsste man mit dem Code hier auf Excel zugreifen können, kann aber nicht.
#include "Odbcdbe.ch"
PROCEDURE Main
LOCAL cConnect, oSession
cConnect := "DBE=ODBCDBE"
cConnect += ";DRIVER=Microsoft Excel Driver (*.xls)"
cConnect += ";FIL=excel 9.0"
cConnect += ";UID=Admin"
cConnect += ";DBQ=D:\XBASE\testdb.xls"
oSession := DacSession():new( cConnect )
IF oSession:isConnected()
USE Customer
Browse()
USE
oSession:disconnect()
ENDIF
RETURN
Wenn ich nämlich unter if osession... eine Meldung ausgeben lasse, wird die niemals angezeigt. Wenn ich das richtig gesehen habe, ist die Bedingung erfüllt, wenn auf testdb.xls zugegriffen werden konnte. Was läuft da falsch? Odbc-Treiber sind installiert und laufen. In der Excel-Datei steht eine Tabelle mit dem Namen Customer und der Bereich mit den Daten heißt auch Customer.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Stevie.
Mindestens das hier fehlt:
Mindestens das hier fehlt:
Code: Alles auswählen
DbeLoad( "ODBCDBE" )
DbeSetDefault( "ODBCDBE" )
Herzlich,
Tom
Tom
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Damit lässt sich erstmal lesen. Ich werd ma versuchen, das dann in eine dbf zu schreiben.Tom hat geschrieben:Hallo, Stevie.
Mindestens das hier fehlt:
Code: Alles auswählen
DbeLoad( "ODBCDBE" ) DbeSetDefault( "ODBCDBE" )
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Stevie.
Das liegt daran, daß die ODBCDBE jetzt Deine Standard-Datenbankengine ist.
Das liegt daran, daß die ODBCDBE jetzt Deine Standard-Datenbankengine ist.
Code: Alles auswählen
DbExport( "text.dbf",,,,,,, "DBFDBE")
Herzlich,
Tom
Tom
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Jetzt ist es zwar eine dbf aber, die sieht grässlich aus. In der dbf sind zwar die Spaltennamen aber in den Datensätzen steht überall Memo. Entsprechend wurde eine dbt angelegt, in der die Memo-Felder stehen. Andere Idee, wenn man jeden Datensatz per FieldGet in einer Schleife ausliest und in ein Array speichert, könnte man das dann in eine dbf schreiben, oder? Problem ist, wie müsste so ein Array aussehen?Tom hat geschrieben:Hallo, Stevie.
Das liegt daran, daß die ODBCDBE jetzt Deine Standard-Datenbankengine ist.
Code: Alles auswählen
DbExport( "text.dbf",,,,,,, "DBFDBE")
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hi Stevie,
du solltest dringend die Grundlagenkapitel in der Onlinehilfe nachlesen.
Um kompatibel zu Clipper zu sein werden in jedes Xbase Programm mehrere Prozeduren automatisch eingebunden. Die dazugehörenden Quellcodes kann man unter ..\source\sys\ finden.
Eine davon ist die AppSys.prg die sich um ein Grundfenster kümmert (CRT), das man später nicht mehr möchte.
Die Dateizugriffe sind in der DbeSys.PRG festgelegt.
Standardmäßig wird dort der DBFNTX Treiber festgelegt.
Wenn du ausschließlich über ODBC arbeiten willst ist das erste Beispiel von Tom richtig gewesen, ansonsten würde ich den default Treiber nicht auf ODBC setzen, sondern eher bei dem USE Commando die VIA ODBCDBE verwenden. In beiden Fällen muss man die ODBCDBE dem System wie oben angeführt verfügbar machen, genauso wie z.B. ein eventueller FOXCDX Treiber für die moderneren Fox-DBF und CDX Dateien. Deren Vorteil liegt in mehr Datentypen, besseren Memofeldern und kleineren Indexdateien.
Um das aber zu verstehen muss man die Grundlagenkapitel wahrscheinlich mehrfach lesen.
du solltest dringend die Grundlagenkapitel in der Onlinehilfe nachlesen.
Um kompatibel zu Clipper zu sein werden in jedes Xbase Programm mehrere Prozeduren automatisch eingebunden. Die dazugehörenden Quellcodes kann man unter ..\source\sys\ finden.
Eine davon ist die AppSys.prg die sich um ein Grundfenster kümmert (CRT), das man später nicht mehr möchte.
Die Dateizugriffe sind in der DbeSys.PRG festgelegt.
Standardmäßig wird dort der DBFNTX Treiber festgelegt.
Wenn du ausschließlich über ODBC arbeiten willst ist das erste Beispiel von Tom richtig gewesen, ansonsten würde ich den default Treiber nicht auf ODBC setzen, sondern eher bei dem USE Commando die VIA ODBCDBE verwenden. In beiden Fällen muss man die ODBCDBE dem System wie oben angeführt verfügbar machen, genauso wie z.B. ein eventueller FOXCDX Treiber für die moderneren Fox-DBF und CDX Dateien. Deren Vorteil liegt in mehr Datentypen, besseren Memofeldern und kleineren Indexdateien.
Um das aber zu verstehen muss man die Grundlagenkapitel wahrscheinlich mehrfach lesen.
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Code: Alles auswählen
aDataArray := {}
Do While !Eof()
aAdd(aDataArray,{})
For i := 1 TO FCount()
aAdd(aDataArray[Len(aDataArray)],FieldGet(i))
Next
DbSkip()
EndDo
aDataArray dürfte dann (zweidimensional) alle Feldinhalte der Datei enthalten.
Du kannst aber auch eine DBF anlegen (mit DbCreate() oder irgendeinem Tool) und die Inhalte aus Deiner Excel-Datei direkt hineinschreiben. Dabei müssen natürlich Typen und Feldlängen übereinstimmen:
Code: Alles auswählen
Select ex // angenommen, der Alias der Excel-Datei lautet so
Do While !Eof()
Select MyDb
Append Blank
MyDb->Name := ex->name
MyDb->Vorname := ex->vorname
* usw.
Unlock
Select ex
DbSkip()
EndDo
Herzlich,
Tom
Tom
Hallo stevie,
so legt man eine Datei per Programm an:
Gruß
Alfred
so legt man eine Datei per Programm an:
Code: Alles auswählen
PROCEDURE Main
LOCAL aStructure := { ;
{ "Betrag" ,"N", 10, 2 }, ;
{ "BELEG1" , "C", 10, 0 }, ;
{ "BUCHDAT", "D", 10, 0 },;
}
SET DATE GERMAN
SET CHARSET TO ANSI
DbCreate( "erffib", aStructure, "DBFNTX" )
RETURN
Alfred
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Arrays
Ich möchte gern Arrays dynamisch erstellen.
for i:=1 to 5
aArray := { }
next
Ausgabe: aArray1
aArray2 usw.
Kann ich jetzt gleich aus aArray dann aArrayi machen, oder wie muss das aussehen, damit der Variablenname bei der Erstellung des Arrays mit angehängt wird?
for i:=1 to 5
aArray := { }
next
Ausgabe: aArray1
aArray2 usw.
Kann ich jetzt gleich aus aArray dann aArrayi machen, oder wie muss das aussehen, damit der Variablenname bei der Erstellung des Arrays mit angehängt wird?
Zuletzt geändert von stevie am Do, 20. Sep 2007 11:07, insgesamt 1-mal geändert.