Deutsch
Forum

LibXL von xlware.com

 
- Seite 1 -



Christof
Neuß
Hallo,

hat sich schon mal jemand mit der DLL LibXL befasst?
Damit kann man direkt auf Exceldateien (auch xlsx und xlsm) zugreifen und diese bearbeiten.

Dateien öffnen und Texte reinschreiben kann ich schon, aber ich verzweifle momentan an den Funktionen, die eine Zahl in eine Zelle schreiben oder einen Wert auslesen. Das kann doch nicht so schwer sein.

Ist für mich interessant, da einige Anwender von Programmen Excel gar nicht mehr lokal installiert haben und die Bearbeitung über ActiveX nicht mehr funktioniert.

Danke...!!!
 
XProfan X3
Win10 16 GB RAM
15.03.2016  
 



 
- Seite 1 -



RGH
Es gibt eine Lösung, die aber nicht ganz aufwandsarm ist:

In Delphi eine Wrapper-DLL schreiben, die dann mit Single arbeitet und die Double als String zurückliefert, etc. Ich habe für mich mal so eine DLL geschrieben, die zur Zeit nur die Funktionen aus meinem Beispiel enthält. Bei der Gelegenheit habe ich die Aufrufkonvention auch von CDECL nach STDCALL gewandelt. Damit sieht das Beispiel jetzt so aus und funktioniert einwandfrei:

Bei WriteNum wird die Funktion single() verwandt, damit die Zahl 1000 nicht als Integer übergeben wird. Man könnte aber auch 1000.0 schreiben oder direkt eine Variable des Typs SINGLE übergeben.

Es wäre also machbar, eine Wrapper-DLL zu schreiben, die alle Funktionen der Original-DLL enthält. Eine andere Möglichkeit wäre, eine Wrapper-DLL nur für die Funktionen zu schreiben, die Double ls Parameter erhalten und/oder Double zurückliefern. Das wäre etwas weniger aufwendig.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
16.03.2016  
 




Christof
Neuß
Hallo Roland,

wie Du schon schreibst... "nicht ganz aufwandsarm".
Und das gilt nicht nur dafür, die zusätzliche DLL-zu realisieren, sondern auch für meine in die Jahre gekommene Anwendung, die ich ziemlich umbauen müsste. Das Problem ist u.a., dass ich auf native Funktionen für ein paar schnelle Dateifunktionen zurückgreife und hier noch mit XPSE compiliere. Der wiederum ist aber nicht so ganz Freund mit einigen XProfan X3-Funktionen und so führt eins zum anderen... Hätte ich jetzt 100 zahlende Kunden würde es mich auch nicht abhalten, das - relativ kleine - Programm ganz neu zu schreiben. Aber es sind nur eine Handvoll Kunden und es wird wahrscheinlich demnächst ganz eingestellt werden. Ich verzichte jetzt auf eine Plausibilitätsprüfung und dann läuft's auch ohne Excelaufruf durch.

Das Thema "Zugriff auf Exceldateien" beschäftigt mich aber weiter. Vielleicht gehe ich mal auf XLware zu und frage, ob es eine Lösung gibt (z.B. Num-Werte als String zu lesen).

EIN Grund für mich seinerzeit mit XProfan anzufangen war auch, aufgrund der Mächtigkeit der Sprache, nahezu keine weitere DLL einsetzen zu müssen. Wenn das so bleiben soll, muss ich andere Möglichkeiten finden.

Vorerst vielen Dank an alle, die hier mitgedacht und geholfen haben.
 
XProfan X3
Win10 16 GB RAM
17.03.2016  
 



 
- Seite 2 -


Wenn wir nur hunderte Leben hätten und die Zeit.

Ich muss gestehen mich jetzt hier ins dies Thema nicht hinein-gekniet zu haben, frage mich aber,

was uns daran hindert, 2 Long vom Stack abzurufen.

Vielleicht durchschaue ich es jetzt aber auch nur nicht, und es wäre nutzlos 2 Long vom Stack abzurufen.

Kannst Du mal ein Mini-Beispiel für NativeProfanFree  [...]  herstellen?

Da könnte man doch eine Wrapper-nProc schreiben, die Roland dann wiederum auch in Profan einbauen könnte. Sowas wie "call2".
 
17.03.2016  
 




Christof
Neuß
Hallo David,

ich habe noch mal ein kleines Beispiel für NativeProfanFree erstellt. Die ZIP-Datei enthält ALLES, inkl. Compiler, Linker etc.
Das Programm enthält jetzt keine nProc. Darauf kommt's aber auch nicht an. Problem ist ja, dass die Double-Rückgaben aus xlSheetReadNumA nicht verarbeitet/umgesetzt werden können.
Schau' Dir vorher vlt. mal die Beispiel.xls an.

Wenn Du Lust und Zeit hast....
Gerne auch noch in DIESEM Leben.

 
XProfan X3
Win10 16 GB RAM
17.03.2016  
 



Mein Gedanke erstmal war, dann eben nur den 32-Bit-Anteil des Wertes zu ermitteln. Dies dürfte vermutlich für die meisten Fälle schon ausreichen - wann arbeitet man schon mit Zahlen im 4-Milliarden-Bereich.

Das Paket schaue ich mir sehr gerne an.
 
17.03.2016  
 




Christof
Neuß
Hallo,

hab' mal xlware angeschrieben und auch eine Antwort erhalten:

---------------------------------------------------
Hi Christof,

thank you for your message.

I have added a possibility to read numbers as strings and write strings as numbers in this build:

Use the Sheet::readStr() method for reading numbers too. Add CELLTYPE_NUMBER (1) parameter for writing a string as number:

sheet->writeStr(7, 5, L"200.55", 0, CELLTYPE_NUMBER);

Please note that it works only for xlsx format at the moment.

Kind regards,
Dmytro Skrypnyk
---------------------------------------------------

Das Auslesen von numerischen Zellen mit readStr() funktioniert auch. Nur mit dem Schreiben habe ich Probleme. Ich weiß nicht, wie ich den Parameter übergeben soll. Was bedeutet das "L" vor "200.55"?

MERCI!

6.117 kB
Hochgeladen:22.03.2016
Ladeanzahl106
Herunterladen
 
XProfan X3
Win10 16 GB RAM
22.03.2016  
 




RGH
Ich habe die neue DLL heruntergeladen. Wie gelingt bei Dir das Lesen der numerischen Werte? Bei mir scheint sich da nichts verändert zu haben. Bist Du sicher, dass die DLL-Version, die Du hoch geladen hast, diese Fähigkeit besitzt? Poste mal Dein aktuelles Beispiel-Listing. Das mit dem Schreiben bekommen wir dann sicher auch hin.

Gruß
Roland
 
XProfan X3
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
22.03.2016  
 



@Christof:

Das L bei c++ vor Stringkonstanten erspart MultiByteToWideChar, die Zeichenkette dahinter ist als WideChar zu übergeben.
 
22.03.2016  
 




Christof
Neuß
Hallo Roland,

also die Lib scheint schon richtig zu sein. Aber Achtung, es funktioniert wohl nur in XLSX-Dateien.

Hier mein Listing und im Anhang meine XLSX-Datei.
 {$pushkeyword xlCreateXMLBookA}
 {$pushkeyword xlCreateBookCA}
 {$pushkeyword xlBookLoadA}
 {$pushkeyword xlBookSaveA}
 {$pushkeyword xlBookReleaseA}
 {$pushkeyword xlBookGetSheetA}
 {$pushkeyword xlSheetWriteStrA}
 {$pushkeyword xlSheetWritenUMA}
 {$pushkeyword xlSheetReadStrA}
 {$pushkeyword xlSheetReadNumA}
 {$pushkeyword dt}
 {$clq}
Declare hLibxl&, book&, sheet&
hLibxl& = ImportDLL("libxl.dll", "")
set("CallConv","CDECL")
Var Datei$="Beispiel.xlsX"
Var ZahlGelesen!=0
Declare Gelesen#
Dim     Gelesen#, 256

proc xlSheetWriteNumD

    parameters s&, x&, y& , d!, f&
    declare d1&, d2&, md#
    dim md#, 8' Ein Double hat 8 Byte = 64 Bit
    md# = addr(d!)' Das Double wird auf den Bereich gemappt
    d1& = long(md#,0)' Die ersten vier Bytes kommen nach d1
    d2& = long(md#,4)' Die zweiten vier Bytes kommen nach d2
    xlSheetWriteNumA(s&, x&, y&, d1&, d2&, f&)

endproc

cls
book& = xlCreateXMLBookA()
Print book&
xlBookLoadA(book&, Datei$)

IF book&

    sheet& = xlBookGetSheetA(book&, 0)
    Print sheet&

    IF sheet&

        xlSheetWriteStrA(sheet&,  9,0, "Eintrag aus XProfan: "+dt("getDate", 6), 0)
        'xlSheetWriteNumD(sheet&, 10,0, 8888.88, 0)
        Gelesen#=xlSheetReadStrA(sheet&, 5,0,0)
        Print STRING$(Gelesen#,0)
        Gelesen#=xlSheetReadStrA(sheet&, 7,0,0)' Hier ist eine Zahl gespeichert.
        Print STRING$(Gelesen#,0)

    ENDIF

    xlBookSaveA(book&, Datei$)
    xlBookReleaseA(book&)

ENDIF

Print "FERTIG!"
FreeDLL hLibXL&
WaitInput
END

8 kB
Hochgeladen:22.03.2016
Ladeanzahl115
Herunterladen
 
XProfan X3
Win10 16 GB RAM
22.03.2016  
 




RGH
Hallo Christof,

das Schreiben einer Zahl als Zahl habe ich auch mit der Umwandlung in einen Widestring (StringW) und dem zusätzlichen Parameter bislang nicht nicht hinbekommen. Es landet immer nur ein String in der Excel-Datei.

Aber wenn Du meine Routine xlSheetWriteNumD benutzt, klappt es in Verbindung mit der verbesserten Lesefunktion hervorragend.

Gruß
Roland
 
XProfan X3
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
22.03.2016  
 




Christof
Neuß
Hallo Roland,

na, das klappt doch wirklich prima. Kann ja auch sein, dass mit der geänderten Schreibfunktion tatsächlich nur Strings geschrieben werden können. Aber dann wäre der zusätzliche Parameter irgendwie unnütz. Egal. So komme ich zurecht.
Vielen Dank!
 
XProfan X3
Win10 16 GB RAM
22.03.2016  
 




Christof
Neuß
Hallo iF,

Deine Lösung mit dem 32-bit-Anteil interessiert mich natürlich auch weiterhin. Wenn das funktioniert, habe ich auch eine Lösung für die xls-Dateien. Und....ja... ich rechne selten mit Zahlen die größer 4 Mrd. sind.



Danke!
 
XProfan X3
Win10 16 GB RAM
23.03.2016  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

14.739 Betrachtungen

Unbenanntvor 0 min.
Christof Neuß05.12.2018
p.specht28.11.2018
Jens-Arne Reumschüssel22.05.2018
Rainer Hoefs17.05.2016
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie