[Erledigt] SQLExpress und Excel 2007/2010

SQL Express von Boris Borzic

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

[Erledigt] SQLExpress und Excel 2007/2010

Beitrag von georg »

Hallo,


es gelingt mir nicht, mit SQLExpress eine gültige XLSX-Ausgabedatei zu erstellen.

Code: Alles auswählen

   oConX := SQLConnection():new()
   cLine := "Driver={" + SQLUGetDriverName("EXCEL", oConX) + "};ReadOnly=0;MaxScanRows=0;FirstRowHasNames=1;FIL=excel 8.0;DBQ=" + cXFile + ";"
   IF !oConX:driverConnect(NIL, cLine)
      ConfirmBox(, "Could not connect to Excel file to export data", "Error", XBPMB_OK, XBPMB_CRITICAL)
      RETU(.F.)
   ENDIF
Dieser Code erstellt die Ausgabe-Datei, wenn sie nicht vorhanden ist. Zumindest bis Excel 2003 hat das funktioniert.

Da Office 2010 behauptet, Version 14 zu sein, habe ich es mit diesem Parameter versucht:

Code: Alles auswählen

FIL=excel 14.0;
Es wird eine Ausgabedatei erzeugt, die aber weder als .XLSX, noch als .XLS geöffnet werden kann. Excel behauptet in beiden Fällen, dass die Datei keine gültige Excel-Datei wäre.

Irgendwer eine gute Idee?

Ach so, ich habe den Report, um den es hier geht, zuerst mit OfficeAutomation erstellt, Laufzeit über 2 Stunden. Die SQLExpress-Variante brauchte keine 5 Minuten, nur sollte das Ziel halt eben XLSX sein.
Zuletzt geändert von georg am Di, 15. Okt 2013 10:03, insgesamt 1-mal geändert.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQLExpress und Office 2007/2010

Beitrag von brandelh »

Zu deiner Frage kann ich dir nix sagen, aber ich liefere XLSX Dateien mit 100.000 Datensätzen, das dauert keine Minute.
Meine Daten liegen in einer DBF und es gibt ja ein Beispiel wie Excel eine DBF öffnet und eine XLS speichert ...
... du brauchst also nur noch die Daten in eine passende DBF zu packen.
Die Spaltenformatierung erledigt bei mir FormatExcelSheet(oBook:ActiveSheet)

Code: Alles auswählen

// Erzeugen eines "Excel.Application"-Objektes
oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
    MsgBox( "Excel ist nicht installiert" )
    RETURN
else
    if val(oExcel:version) < 12 // bei großen Dateien !
       MsgBox( "Excel 2007ff wird benötigt !" )
    endif
ENDIF

// Vermeiden von Nachrichten wie "Die Datei existiert bereits". Sicherstellen, dass die Excel-Anwendung sichtbar ist.
oExcel:DisplayAlerts := .F.
oExcel:visible       := .T.

... DBF erzeugen, vorbereiten ...

delete file (cDir+cExcel+".XLSX")
oBook := oExcel:workbooks:Open(cDir+aExcelExport[x]+".DBF")
FormatExcelSheet(oBook:ActiveSheet)
oBook:SaveAs( cDir+aExcelExport[x] , xlOpenXMLWorkbook )
oBook:close()
Das geht wirklich recht schnell, meine größte DBF war 250 MB, die XLSX daraus hat noch 65 MB.
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQLExpress und Office 2007/2010

Beitrag von georg »

Hallo, Hubert -


was weiss ich, woran unsere Office-Installation möglicherweise krankt.

Mir geht es darum, mit SQLExpress eine Office 2007/2010 kompatible Excel-Datei zu erstellen. Das ich das mit OfficeAutomatioon kann, hatte ich - denke ich - bereits geschrieben.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQLExpress und Office 2007/2010

Beitrag von brandelh »

Hallo Georg,

du hattest geschrieben, dass das 5 Minuten gedauert hat (also wohl Zeile für Zeile ausfüllen ... LAHM) und ich dachte (in meinem Wahn), du könntest an einer schnelleren Lösung interessiert sein ... :badgrin:
Sorry, aber - wie oben schon bemerkt - kann ich zur SQLexpress Frage sonst nichts beitragen. :D
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQLExpress und Office 2007/2010

Beitrag von georg »

Hallo, Hubert -


das Problem mit OfficeAutomation ist noch ein anderes. Im gleichen Programm erstelle ich ca. 50 Excel-Dateien (Low-Level Copy, Open, Erstellen, Close). Wenn diese Routine zwei, drei mal durchlaufen wird, habe ich (trotz :close() und :destroy()) 100 bis 150 Excel-Prozesse im Speicher. Diese werden zwar geschlossen, wenn das Programm beendet wird (kann man so auch in der Dokumentation zu AutomationObject() nachlesen) - aber genau dieses Problem habe ich mit SQLExpress nicht.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: SQLExpress und Office 2007/2010

Beitrag von Werner_Bayern »

Dazu kann ich eine Empfehlung abgeben:

http://www.libxl.com

Damit kann man Excel lesen und schreiben, ohne Excel! Und das sehr schnell! Setze es seit 1 Jahr in einem Tool ein, was früher 7-8 Stunden dauerte (Öffnen, Auslesen und Schreiben einer Ergebnisdatei von ca. 150 Excel-Dateien), dauert jetzt keine 30 Minuten.

Kann xls und xlsx.

Und der Support ist gut und schnell.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQLExpress und Office 2007/2010

Beitrag von brandelh »

Mein Programm erstellt etwa 20 Dateien, wobei es die eine Excel Instanz immer neu benutzt.
Im Speicher kann ich keine 20 Excelinstanzen finden ... aber die LIB sieht viel versprechend aus !
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: SQLExpress und Office 2007/2010

Beitrag von AUGE_OHR »

georg hat geschrieben:Dieser Code erstellt die Ausgabe-Datei, wenn sie nicht vorhanden ist. Zumindest bis Excel 2003 hat das funktioniert.
...
Irgendwer eine gute Idee?
das geht doch über ODBC ?
und du arbeitest sicherlich auf einem 64bit OS()

... welche Version Office hast du ?
... welchen ODBC Treiber benutzt du ?

p.s. Xbase++ ActiveX Code läuft auch unter harbour und statt 5min dann 30sec. ( Faktor 30 - 40 je nach CallMethod )
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQLExpress und Office 2007/2010

Beitrag von georg »

Hallo, Jimmy -


der betreffende Rechner läuft unter einem Windows 7 Pro, 32 bit. Eingesetzt wird Office 2010 mit dem dazugehörigen ODBC-Treiber.

Aber mich interessiert, ob das hier jemand schon umgesetzt hat. Das scheint aber - wenn ich mir so die Antworten durchlese - noch keiner gemacht zu haben.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen 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: SQLExpress und Office 2007/2010

Beitrag von AUGE_OHR »

georg hat geschrieben:der betreffende Rechner läuft unter einem Windows 7 Pro, 32 bit. Eingesetzt wird Office 2010 mit dem dazugehörigen ODBC-Treiber.
ok ... bei 32bit "solltest" du Zugriff auf die richtigen ODBC Treiber haben.
georg hat geschrieben:Aber mich interessiert, ob das hier jemand schon umgesetzt hat. Das scheint aber - wenn ich mir so die Antworten durchlese - noch keiner gemacht zu haben.
im Zweifel Boris mal fragen. ( auch unter http://www.xbwin.com/forum.html -> SqlExpress )
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQLExpress und Office 2007/2010

Beitrag von georg »

Hallo,


ja, Boris wusste um die Ursache des Problems: der ODBC-Treiber erstellt eine .xlsb (binary) Datei, die unter diesem Namen auch einwandfrei geöffnet werden kann.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten