DBF in XLSX konvertieren

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

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

DBF in XLSX konvertieren

Beitrag von DerRolf »

Hallo allerseits.
Gibt es eine Möglichkeit eine DBF in eine XLSX zu konvertieren?
Ich habe mir auch schon die LIBXL.LIB angeschaut.
Wüsste jetzt nicht so auf Anhieb, wie es damit gehen könnte. :?: :?
Gibt es da evtl. was einfacheres?

Bin für jeden Tip dankbar.

Vielen Dank.
Gruß Rolf
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2381
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 30 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von Koverhage »

Ja die dbf mit Excel öffnen und dann speichern als Excel Datei.
Gruß
Klaus
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 2 Mal

Re: DBF in XLSX konvertieren

Beitrag von DerRolf »

Hi Klaus.
Da finde ich jetzt nichts, wo man eine DBF in Excel importieren kann. ??

SQL etc..., aber kein DBF Format.

Gruß Rolf
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 375
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 57 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von Marcus Herz »

Excel hat früher noch DBF unterstüzt, jetzt nicht mehr.
An XLS-ActiveX kann man einem Range ein mehrdimensionales Array übergeben, Der Range musste der Dimension des Arrays entsprechen. Das ist extrem schnell.
Mit LIbXl muss das genauso gehen, habe ich aber noch nicht prbiert.
Die Speichergröße des Arrays darf 64k nicht übersteigen
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 2 Mal

Re: DBF in XLSX konvertieren

Beitrag von DerRolf »

Koverhage hat geschrieben: Mo, 15. Feb 2021 13:03 Ja die dbf mit Excel öffnen und dann speichern als Excel Datei.
Ich habs gefunden. :roll: #-o
Super, danke dir.
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 2 Mal

Re: DBF in XLSX konvertieren

Beitrag von DerRolf »

Marcus Herz hat geschrieben: Mo, 15. Feb 2021 13:17 Excel hat früher noch DBF unterstüzt, jetzt nicht mehr.
An XLS-ActiveX kann man einem Range ein mehrdimensionales Array übergeben, Der Range musste der Dimension des Arrays entsprechen. Das ist extrem schnell.
Mit LIbXl muss das genauso gehen, habe ich aber noch nicht prbiert.
Die Speichergröße des Arrays darf 64k nicht übersteigen
Hi Marcus.
Doch geht immer noch.
Beim " Datei öffnen", den Dateityp ändern.

Gruß Rolf
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 2 Mal

Re: DBF in XLSX konvertieren

Beitrag von DerRolf »

Koverhage hat geschrieben: Mo, 15. Feb 2021 13:03 Ja die dbf mit Excel öffnen und dann speichern als Excel Datei.
Gibt es eine Möglichkeit das in xBase zu machen?

Gruß Rolf
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 2 Mal

Re: DBF in XLSX konvertieren

Beitrag von DerRolf »

Man kann in xBase mit folgendem Befehl eine Excel Tabelle öffnen: oWorkBook := oExcel:Workbooks:Open(cExcelDatei)
Gibt es da eine Möglichkeit eine DBF zu öffnen?

Beim Speichern kann ich ja mit einem Parameter auswählen, welche Dateityp gespeichert werden soll.
BSP.: oWorkBook:SaveAs(cTempFilename,6)
Wobei die 6 eine CSV Datei erstellt.


Gruß Rolf
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 59
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von ingo »

Moin Rolf,
ich mache das - vermutlich gewöhnungsbedürftiger Code - aber ich schätze erkennbar wie's geht.
Die entscheidenden Methoden sind angehängt.
Das funktioniert grundsätzlich prima, nur wenn man große Tabellen mit mehreren tausend Zeilen öffnet und dann ein paar tausend Zellen formatiert hängt Excel sich auf und das XBase-Programm bleibt einfach stehen.
Formatierung z.B. mit:
::oSheet:Cells( nZeile, nSpalte ):Interior:ColorIndex := nFarbe
(Ich suche grade, ob ich dagegen etwas tun kann.)
Excel_Beispiel.prg
(5.67 KiB) 58-mal heruntergeladen
Schönen Gruß, Ingo
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 375
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 57 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von Marcus Herz »

XLS Formatierungen, hatte ich auch meine Problem.
Ich verwende jetzt immer eine Formatierungsbedingung und weis diese einem Range zu. Stabil
in etwa so:

Code: Alles auswählen

		
oRange	:= oSheet:range("A2:H99")
// man kann noch eine Bedingung für die Fareb setzen
//oRange   :FormatConditions:Add( xlExpression,,'=F2=0' )
oFormat:= oRange:FormatConditions(1):Interior
oFormat	:Pattern					:= xlSolid
oFormat	:Color					:= GraMakeRgbColor( {247,161,137} )
oFormat	:TintAndShade        := 0
oFormat	:PatternTintAndShade := 0
// du kannst mehrere Formatireungen setzen, jeweils für eine Farbe mit Bedingung
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 59
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von ingo »

Moin Marcus,
danke für den Tipp!
Da werde ich mal herumprobieren.
Schönen Gruß, Ingo
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 2 Mal

Re: DBF in XLSX konvertieren

Beitrag von DerRolf »

Danke dir Ingo.
Das sind aber teilweise 400.000 Zeilen.
Mir würde schon das Öffnen einer DBF unter xBase weiterhelfen.

Gruß Rolf
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 59
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von ingo »

Moin Rolf,
das Öffnen findest du im Beispielcode - die Probleme treten erst beim Formatieren der Tabelle auf.
Ganz kurz geht's so (ohne das Fehler abfangen):

#define xlWorkbookDefault 51 // Excel Format für Saveas

::oExcel := CreateObject( "Excel.Application" )
::oBook := ::oExcel:workbooks:Open( cExcelDateiName ) // z.B. "C:\TEMP\FILENAME.DBF"
::oSheet := ::oBook:worksheets( 1 ) // setzt die 1. Tabelle aktiv

...und dann kannst du damit arbeiten und zum Schluß speichern:

::oBook:Saveas( "C:\TEMP\FILENAME.xlsx", xlWorkbookDefault ) // <- erzeugt eine .xlsx bei Office 2007 ff.
Schönen Gruß, Ingo
DerRolf
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Mi, 10. Sep 2014 9:53
Hat sich bedankt: 2 Mal

Re: DBF in XLSX konvertieren

Beitrag von DerRolf »

ingo hat geschrieben: Mo, 15. Feb 2021 14:45 Moin Rolf,
das Öffnen findest du im Beispielcode - die Probleme treten erst beim Formatieren der Tabelle auf.
Ganz kurz geht's so (ohne das Fehler abfangen):

#define xlWorkbookDefault 51 // Excel Format für Saveas

::oExcel := CreateObject( "Excel.Application" )
::oBook := ::oExcel:workbooks:Open( cExcelDateiName ) // z.B. "C:\TEMP\FILENAME.DBF"
::oSheet := ::oBook:worksheets( 1 ) // setzt die 1. Tabelle aktiv

...und dann kannst du damit arbeiten und zum Schluß speichern:

::oBook:Saveas( "C:\TEMP\FILENAME.xlsx", xlWorkbookDefault ) // <- erzeugt eine .xlsx bei Office 2007 ff.
Hi Ingo.
Danke dir.
Genau das brauche ich.
Ich brauche die Excel Tabelle nicht zu bearbeiten, da ich das schon bei der DBF gemacht habe.

Ich werde es sofort testen.
Gruß Rolf
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 59
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren @Markus wg. range

Beitrag von ingo »

Hi Markus,
nochmal danke für den Tipp - haut aber leider auch nicht hin.
Bei der Tabelle mit 130.000 Zeilen, in der ich ca. jede 10.Zeile farblich hinterlegen will klappt's jetzt zwar besser, aber nach ungefähr 80.000 Zeilen bleibt Excel trotzdem hängen.
...nur zur INfo der Vollständigkeit halber.
Schönen Gruß, Ingo
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 375
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 10 Mal
Danksagung erhalten: 57 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von Marcus Herz »

Bei dem Datenvolumen wohl eher ein XLS Problem
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2182
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 31 Mal

Re: DBF in XLSX konvertieren

Beitrag von ramses »

Mit LibXL.DLL geht das echt schnell und gut.
Von Hubert gibts hier im Forum eine Klasse mit Beispielen der dir die ersten Schritte zeigt damit siehst du wie einfach das geht.
Nach einigen Sorgen mit dem Excel Objekt habe ich auf LibXL umgestellt seitdem haben die Anwender keine Probleme mehr.
Was damit nicht geht sind einzig "XLSB" Tabellen.
Valar Morghulis

Gruss Carlo
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 59
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren @Carlo

Beitrag von ingo »

Moin Carlo,
danke für den Libxl-Tipp. Es ist allerdings so, dass es sich bei dem Problem eher um eine Art Goodie für einen einzigen Kunden handelt, der dafür weniger zahlen wird, als die Libxl kostet - von daher ist das im Moment nix, aber ich hab's im Hinterkopf, dass es sowas gibt.
Schönen Gruß, Ingo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2182
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 31 Mal

Re: DBF in XLSX konvertieren

Beitrag von ramses »

Hallo Ingo

Dann wäre die Ansage: "Kauf es oder lass es." vielleicht passend.
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12579
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 3 Mal
Danksagung erhalten: 12 Mal

Re: DBF in XLSX konvertieren

Beitrag von AUGE_OHR »

hi,

ausser Xbase++ ActiveX gäbe es noch DispHelper in Ot4Xb was zudem viel schneller ist.
Nachteil : es kann keine Events "empfangen"

ActiveX ist für "allgemein" gedacht während ADO für Daten das Werkzeug ist was man verwenden sollte.
https://www.microsoft.com/en-us/downloa ... n&id=13255

dabei setzt ADO kein EXCEL voraus um ein XLSx zu erstellen/füllen.
es ähnelt eher ODBC und ist auch mit SQL zu verwenden

p.s. es könnte die VC Runtime nach der Installation von ADO fehlen
Visual C++ Redistributable für Visual Studio
https://www.microsoft.com/de-DE/downloa ... x?id=48145
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15465
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 29 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von brandelh »

Hi,

falls es dazu noch fragen gibt, ich meine das erste Beispiel von Xbase ActiveX ist genau diese Aufgabe !
Per PRG Fernsteuerung ist das auch kein Problem, nur wenn man im neuen Excel Datei öffnen macht, findet man keine DBF ... sehr gut versteckt in den Eigenschaften oder Optionen von Excel gibt es eine Tabelle,
welche Dateiformate angezeigt werden sollen, da kann man es wieder einschalten und gut ist.

Mein Exportprogramm, mit dem ich XLSX oder XLSB speichere habe ich bis Excel 2013 getestet, aber die VBA Schnittstelle sollte mit allen gehen.
Gruß
Hubert
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 59
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: DBF in XLSX konvertieren

Beitrag von ingo »

Hallo und danke für die Tipps zum Thema!
Mein Problem hat sich jetzt allerdings aufgelöst und zwar ist für die Abstürze beim Formatieren offenbar irgendein Office-(2016)-Problem (auf meinem Programmier-Rechner) verantwortlich.
Das selbe Programm funktioniert auf bisher 2 anderen Rechnern (mit Office 2013 und 2016.)
Auf dem Problem-Rechner gab es zwischendurch unmotiviert die Nachricht, dass es ein Problem mit meinem Microsoft-Konto gäbe, ich hätte möglicherweise das Passwort geändert. Das Problem tritt aber auf unabhängig davon auf, ob eine Anmeldung aktiv ist oder nicht.
Also für mich ist das Problem durch das Verwenden von "Range" gelöst.
Schönen Gruß, Ingo
Antworten