| |
|
|
Christof Neuß | Salut,
hat sich déjà la fois quelqu'un avec qui DLL LibXL befasst? avec cela peux on direct sur Exceldateien (aussi xlsx et xlsm) zugreifen et cet Travailler.
Fichiers ouvrir et Textes reinschreiben peux je déjà, mais je verzweifle momentan à den Funktionen, qui une numéro dans un cellule écrivons ou bien une Wert auslesen. cela peux doch pas so schwer son.
Ist pour mich intéressant, là quelques Anwender de Programmen Excel gar pas plus bistrot installiert avons et qui Bearbeitung sur ActiveX pas plus funktioniert.
merci...!!! |
|
|
| |
|
|
|
H.Brill | si oui déjà cela wesentliche klappt : quoi steht car dans qui Doku de qui DLL ? comment sommes car qui Übergabe - paramètre ?
Quelque chose comme scheitert la plus part du temps, si le Übergabe qui paramètre faux ist. veux appeler, si vous per référence ou bien per Wert transfert volonté.
chez den payons sais je maintenant pas oui c'est ca, si là Profan aussi per Ref. übergibt. Notfalls fois le trop übergebene numéro dans une Bereich écrivons et cette ensuite transfert. cela gleiche gilt aussi beim Lesen. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 15.03.2016 ▲ |
|
|
|
|
RGH | Hakllo,
cela Problem ist ici, dass qui Funktion zum écrivons qui numerischen Werte un Double (64 Bit) comme Wert (byVal) erwartet. dans 32-Bit-XProfan sommes mais alle paramètre chez einem API-Aufruf 32-Bit breit. avec einer kleinen Zusatz-Procédure peut wir mais un Double sur deux LongInts verteilen et cet transfert. Einer API-Funktion ist es égal si qui 64 Bit comme un paramètre ou bien comme deux paramètre überegeben volonté. Es doit arrêt 64 Bit son, qui là venons:
Déclarer Handle hLibxl, book, sheet
hLibxl = ImportDLL("libxl.dll", »)
set("CallConv","CDECL")
proc xlSheetWriteNumD
parameters handle s, longint x,y , double d, handle f
declare longint d1, d2, memory md
dim md, 8' un Double hat 8 Byte = 64 Bit
md = addr(d)' cela Double wird sur den Bereich gemappt
d1 = long(md,0)' qui ersten quatre Bytes venons pour d1
d2 = long(md,4)' qui zweiten quatre Bytes venons pour d2
xlSheetWriteNumA(s, x, y, d1, d2, f)
endproc
cls
book = xlCreateBookCA()
IF book
sheet = xlBookAddSheetA(book, "sheet1", 0)
IF sheet
xlSheetWriteStrA(sheet, 2, 2, "Hello, World!", 0)
xlSheetWriteNumD(sheet, 3, 1, 1000, 0)
ENDIF
xlBookSaveA(book, "example.xls")
MessageBox("File Written", », 0)
xlBookReleaseA(book)
ENDIF
WaitInput
FIN
So funktioniert es! là beim Lecture cela gleiche Problem auftaucht, sollte on numerische Werte comme String auslesen et ensuite avec VAL transformer.
Salut 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 | 15.03.2016 ▲ |
|
|
|
|
Christof Neuß | c'est oui la fois wieder genial
à peine allez on 'ne Std. joggen, um cela Hirn wieder quelque chose trop lüften, déjà findet on ici une Hinweis, qui weiterhilft. DANKE Roland. cela hat déjà la fois bien geklappt.
malheureusement suis je im Umgang avec DLL toujours Laie et verzweifle plus...
Schau' la fois:
Déclarer Handle hLibxl, book, sheet
hLibxl = ImportDLL("libxl.dll", »)
set("CallConv","CDECL")
Var Dossier$="Test1.xls"
Var Gelesen$=»
proc xlSheetWriteNumD
parameters handle s, LONGint x,y , double d, handle f
declare longint d1, d2, memory md
dim md, 8' un Double hat 8 Byte = 64 Bit
md = addr(d)' cela Double wird sur den Bereich gemappt
d1 = long(md,0)' qui ersten quatre Bytes venons pour d1
d2 = long(md,4)' qui zweiten quatre Bytes venons pour d2
xlSheetWriteNumA(s, x, y, d1, d2, f)
endproc
cls
book = xlCreateBookCA()
xlBookLoadA(book, Dossier$)
IF book
'sheet = xlBookAddSheetA(book, "sheet1", 0)
sheet = xlBookGetSheetA(book, 0)
IF sheet
xlSheetWriteStrA(sheet, 2, 2, "Hello!", 0)
xlSheetWriteNumD(sheet, 3, 1, 1000, 0)
Gelesen$=xlSheetReadStrA(sheet, 9,0)
Imprimer Gelesen$
ENDIF
xlBookSaveA(book, "Test1.xls")
xlBookReleaseA(book)
ENDIF
Imprimer "FERTIG!"
WaitInput
FIN
Gelesen$ wird zwar bestückt, mais je erhalte quelque chose comme comment une Pointer, ou bien? comment vais je car avec cela um? Hab' déjà cela une ou bien autre ausprobiert, mais je trouve es pas raus.
et beim Zahlenauslesen comme Text - quoi je grundsätzlich verstehe - stellt sich qui Frage, si qui Funktion xlSheetReadStr() chez einer "Zahlenzelle" überhaupt funktioniert.
déjà la fois wieder un großes DANKE... |
|
|
| |
|
|
|
H.Brill | Soweit je cela vois, wird là encore un Format avec retour :
Reads a string and its format à partir de cell
Müßtest du la fois ausprobieren, si là un Bereich pas besser wäre :
si qui DLL-Funktion un Nullbyte derrière den String mets, ist es oui simple, avec String$(Bereich#, 0) à den String trop venons.
Roland : Könnte il zur Übergabe de payons pas aussi Double(N&) ou bien QuadInt prendre ? qui sommes doch 64Bit breit.
Ansonsten probier es la fois avec Bereich#. là bekommt on on oui aussi avec Float(V, A) une 64Bit - Wert. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 15.03.2016 ▲ |
|
|
|
|
Christof Neuß | Hi,
Textes et Formeln auslesen peux je maintenant déjà la fois. cela allez relativ simple avec
chez payons funktioniert cela mais malheureusement pas. |
|
|
| |
|
|
|
H.Brill | prends mais lieber la fois Bereiche :
Gelesen& est un normaler LongInt. cela klappt zwar dessus, weil beides qui Variablen-Adresse beinhaltet, ist mais pas so de Roland beabsichtigt et peux durchaus la fois manquer.
Mach besser :
quoi encore allez, est un Pointer.
chez payons peux cela aussi pas marcher. ici doit on qui Bereichsfunktionen Float(V,A) ou bien Long(V, A) benutzen. qui String$() - Funktion liest solange, jusqu'à entweder un Nullbyte venez ou bien jusqu'à à l' cela Ende des Bereichs. et Zahlenwerte avons nunmal ne...aucune Nullbyte. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 15.03.2016 ▲ |
|
|
|
|
Christof Neuß | Merci pour den Hinweis. Ok, hab' s sur Bereiche umgestellt. Im STR-Bereich alles comment auparavant et - malheureusement - aussi im Zahlenbereich. Es funktioniert pas. égal, quoi je aussi probiere...
So geht's pas...
... avec ZahlGelesen&=Long(Gelesen#,0) geht's aussi pas. je bekomme seulement Fehlermeldungen.
|
|
|
| |
|
|
|
RGH | Zum String-Bereich: il muss pas dimensioniert volonté, là qui API-Funktion ca dans diesem le cas erledigt.
Zum Lesen de payons: ici ist cela Problem, dass aussi qui Rückgabewert einer API-Funktion im 32-Bit-XProfan seulement un 32-Bit-Wert (LongInt, Bereich, Handle ou bien Double) son peux, quoi pour qui gesamte Windows-API zutrifft. qui Funktion qui DLL liefert mais chez numerischen Werten une Double (64 Bit) zurück, quoi avec XProfan eh bien la fois pas allez. AUch cela Auislesen comme String funktioniert pas, là qui Funktion, comme aussi dans qui Documentation steht, NULL zurückliefert, si dans qui cellule ne...aucune String ist
Salut 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 | 15.03.2016 ▲ |
|
|
|
|
Christof Neuß | allô Roland,
merci pour qui Info. tant pis. mais ensuite brauche je pas plus trop essayer. Momentan brauche je tats. seulement qui Lesefunktion pour Cordes. cela reicht oui ensuite. malheureusement peux ich's ensuite pas pour autre Anwendungen nutzen. |
|
|
| |
|
|
|
RGH | il y a une Solution, qui mais pas entier aufwandsarm ist:
dans Delphi une Wrapper-DLL écrivons, qui ensuite avec Single arbeitet et qui Double comme String zurückliefert, etc. j'ai pour mich la fois so une DLL geschrieben, qui zur Zeit seulement qui Funktionen aus meinem Beispiel contient. chez qui Gelegenheit habe je qui Aufrufkonvention aussi de CDECL pour STDCALL gewandelt. avec cela sieht cela Beispiel maintenant so aus et funktioniert einwandfrei:
Déclarer Handle hLibxl, book, sheet, format, memory gelesen
hLibxl = ImportDLL("prlibxl.dll", »)
cls
book = xlCreateBookCA()
IF book
sheet = xlBookAddSheetA(book, "sheet1", 0)
IF sheet
xlSheetWriteStrA(sheet, 2, 2, "Hello, World!", 0)
xlSheetWriteNumA(sheet, 3, 1, single(1000), 0)
gelesen = xlSheetReadStrA(sheet, 2, 2, 0)
Imprimer String$(Gelesen, 0)
gelesen = xlSheetReadNumA(sheet, 3, 1, 0)
Imprimer String$(Gelesen, 0)
ENDIF
xlBookSaveA(book, "example.xls")
MessageBox("File Written", », 0)
xlBookReleaseA(book)
ENDIF
WaitInput
FIN
chez WriteNum wird qui Funktion single() verwandt, avec cela qui numéro 1000 pas comme Integer transfert wird. on pourrait mais aussi 1000.0 écrivons ou bien direct une variable des Typs SINGLE transfert.
Es wäre alors machbar, une Wrapper-DLL trop écrivons, qui alle Funktionen qui Original-DLL contient. une autre Possibilité wäre, une Wrapper-DLL seulement pour qui Funktionen trop écrivons, qui Double ls paramètre conservé et/ou bien Double zurückliefern. cela wäre quelque chose moins aufwendig.
Salut 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ß | allô Roland,
comment Du déjà écris... "nicht entier aufwandsarm". et cela gilt pas seulement pour, qui zusätzliche DLL-trop realisieren, mais aussi pour mon dans qui Jahre gekommene Anwendung, qui je assez umbauen devrait. cela Problem ist u.a., dass je sur native Funktionen pour un paire schnelle Dateifunktionen zurückgreife et ici encore avec XPSE compiliere. qui wiederum ist mais pas so entier ami avec einigen XProfan X3-Funktionen et so führt une zum anderen... Hätte je maintenant 100 zahlende Kunden serait es mich aussi pas empêcher, cela - relativ kleine - Programme entier récente trop écrivons. mais il y a seulement une Handvoll Kunden et es wird wahrscheinlich bientôt entier eingestellt volonté. je verzichte maintenant sur une Plausibilitätsprüfung et ensuite läuft's aussi sans Excelaufruf par.
cela Thema "Zugriff sur Exceldateien" beschäftigt mich mais plus. peut-être vais je la fois sur XLware trop et frage, si es une Solution gibt (z.B. Num-Werte comme String trop lesen).
EIN Grund pour mich seinerzeit avec XProfan anzufangen était aussi, aufgrund qui Mächtigkeit qui Discours, nahezu aucun weitere DLL einsetzen trop doit. si cela so rester soll, muss je autre Opportunités trouver.
Vorerst vielen Dank à alle, qui ici mitgedacht et geholfen avons. |
|
|
| |
|
|