Italia
Foro

LibXL von xlware.com

 
- Page 1 -



Christof
Neuß
Ciao,

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

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

Ist per mich interessant, da einige Anwender von Programmen Excel gar nicht mehr lokal installiert haben und die Bearbeitung circa ActiveX nicht mehr funktioniert.

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



 
- Page 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 per 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 trasferimento wird. Man potuto aber auch 1000.0 schreiben oder direkt una variabile des Typs SINGLE trasferimento.

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 per die Funktionen zu schreiben, die Double ls Parameter erhalten und/oder Double zurückliefern. Das wäre etwas weniger aufwendig.

Saluto
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 per meine in die Jahre gekommene Anwendung, die ich ziemlich umbauen müsste. Das Problem ist u.a., dass ich auf native Funktionen per 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 per 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  
 



 
- Page 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 per NativeProfanFree  [...]  herstellen?

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




Christof
Neuß
Hallo David,

ich habe noch mal ein kleines Beispiel per NativeProfanFree erstellt. Die ZIP-File 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 potrebbe presumibilmente per 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ß
Ciao,

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 Io l' Parameter trasferimento soll. Was bedeutet das "L" vor "200.55"?

MERCI!

6.117 kB
Hochgeladen:22.03.2016
Downloadcounter120
Download
 
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.

Saluto
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 trasferimento.
 
22.03.2016  
 




Christof
Neuß
Hallo Roland,

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

Hier mein Listing und im Anhang meine XLSX-File.
 {$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 File$="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&, File$)

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&, File$)
    xlBookReleaseA(book&)

ENDIF

Print "FERTIG!"
FreeDLL hLibXL&
WaitInput
END

8 kB
Hochgeladen:22.03.2016
Downloadcounter128
Download
 
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 finora nicht nicht hinbekommen. Es landet immer nur ein String in der Excel-File.

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

Saluto
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 modificato 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 naturalmente auch weiterhin. Wenn das funktioniert, habe ich auch eine Lösung per die xls-File. Und....ja... ich rechne selten mit Zahlen die größer 4 Mrd. sind.



Danke!
 
XProfan X3
Win10 16 GB RAM
23.03.2016  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

15.099 Views

Untitledvor 0 min.
H.Brill29.01.2025
Christof Neuß05.12.2018
p.specht28.11.2018
Jens-Arne Reumschüssel22.05.2018
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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