Page 4 of 6
Import/export Excel files - Esempio ok!
Posted: Wed Jun 21, 2023 8:36 pm
by Gfb22
...Con l'ultimo esempio viene visualizzato anche il mio file Excel: benissimo!
Grazie.
gfb
- xls3.jpg (45.72 KiB) Viewed 1760 times
Import/export Excel files - Esempio ok!
Posted: Mon Aug 07, 2023 7:17 pm
by Gfb22
Wolfgang buonasera.
Ho ripreso il tuo esempio, compreso (+/-) come funziona di massima e alla fine fatto procedura per convertire il file di Excel in DBF leggendo la struttura del file di Excel, creando il file DBF per poi leggere ogni riga del file Excel per scrivere nuovi record nel file DBF e tutto funziona!!
...ecco il codice che ho usato per fare la scansione del file Excel e creare il file DBF con la struttura corretta:
Code: Select all
for nRow := 1 upto nRows
for nCol := 1 upto nCols
uValue := oSheet:GetValue( nRow, nCol )
if nRow = 1 // Primo giro: nome colonna/campo
aStruct[ nCol , 1] := AllTrim(uValue)
aStruct[ nCol , 2] := ""
aStruct[ nCol , 3] := 0
aStruct[ nCol , 4] := 0
elseif ! IsNil( uValue )
cValType := ValType( uValue )
aStruct[ nCol , 2] := cValType
aStruct[ nCol , 3] := Max( aStruct[ nCol , 3], iif(cValType = "C", Len(AllTrim(uValue) ) , LENNUM(uValue) ) )
aStruct[ nCol , 4] := iif( cValType = "C", 0, Max( aStruct[ nCol , 4], SetDecimal(uValue) ) )
endif
next
next
cFileDBF := "C:TEMPTEMPSTRU.dbf"
DBCREATE(cFileDBF, aStruct) // Crea file temporaneo
-------------------
1) se al posto di un file .xlsx trovo un file .xls?
2) Adesso volevo fare il passaggio inverso, cioè creare un file Excel partendo da un DBF.
Hai qualche suggerimento?
Grazie e buon proseguimento (...non ho premura per questo
...
Import/export Excel files - Esempio ok!
Posted: Tue Aug 08, 2023 3:44 am
by wriedmann
Ciao Gian Ferruccio,
benissimo che funziona come ti serve.
Quando trovi un file xls invece del xlsx: purtroppo non funziona perchè il formato del file è completamente diverso. xlsx (come docx e pptx tra l'altro) in sostanza è un file zip che contiene i dati all'interno di diversi file xml, ed è questo che la libreria sfrutta (prova a rinominare un xlsx in zip e poi aprirlo....). Xls invece è un formato proprietario che la libreria usata non riesce a leggere. Ci sono altre librerie per questo.
Per quanto riguarda la scrittura di file xlsx: ovviamente anche questo è possibile. Queste sono le parti rilevanti per crearlo:
Code: Select all
oXlsxFile := IXlsxFile{}
oXlsxFile:CreatePackage()
per aggiungere un foglio:
Code: Select all
if _oXlsxFile:NumSheets == 0
oXlsSheet := oXlsxFile:AddSheet( "Foglio dati" )
else
oXlsSheet := oXlsxFile:GetSheet( 1 )
endif
per scrivere dati:
Code: Select all
oXlsSheet:SetValue( nRiga + 4, 2, "nome cliente" )
oXlsSheet:SetValue( nRiga + 4, 3, "articolo" )
e poi per salvarlo:
Saluti
Wolfgang
Import/export Excel files - Esempio ok!
Posted: Fri Aug 11, 2023 6:09 am
by Gfb22
Grazie Wolfgang.
Con VO ho completato le due procedure per convertire i file da DBF a XLSX e da XLSX a DBF e tutto funziona bene.
Ho provato a compilare con XIDE ma ci sono alcuni errori (vedi file allegato), in particolare relativi a OleAutoObjectEx.
Forse mi avevi già dato indicazioni a riguardo ma non le ritrovo.
Grazie!
Import/export Excel files - Esempio ok!
Posted: Fri Aug 11, 2023 6:31 am
by wriedmann
Ciao Gian Ferruccio,
in X# non devi usare OleAutoObjectEx, ma puoi usare la libreria direttamente mettendola tra le References. Allora non solo hai codice che viene controllato dal compilatore, ma anche codice più veloce.
Saluti
Wolfgang
Import/export Excel files - Esempio ok!
Posted: Mon Aug 14, 2023 9:01 am
by Gfb22
Buongiorno Wolfgang.
1) "...in X# non devi usare OleAutoObjectEx, ma puoi usare la libreria direttamente mettendola tra le References. " ...Dove trovo la libreria da inserire tra le references?
2) Ho fatto altri passi inserendo quanto sperimentato in VO come Test nella mia app che, in VO, funziona.
Compilando in XIDE mi da l'errore:
"error XS0246: The type or namespace name 'IXlsxFile' could not be found (are you missing a using directive or an assembly reference?) 269,2 Utility.prg StandardShellWindow:SalvaDBF"
---------
Grazie!
gfb
Import/export Excel files - Esempio ok!
Posted: Mon Aug 14, 2023 7:33 pm
by wriedmann
Buona sera Gian Ferruccio,
scusami la risposta ritardata - ma da buon Italiano sono in ferie e Ferragosto <g>.usa
Per quanto riguarda a tua prima domanda: in VO stai usando la DLL XSharp.Tools.XlsxFile.DLL tramite COM. Visto che questa DLL è una DLL .NET (e precisamente scritta in X#), in X# (come peraltro anche in C# e VB.NET) può essere usata direttamente aggungendola tra le "References".
E per la seconda domanda: dato che non hai incluso la DLL tra le referenze, il compilatore non trova la classe e per questo ti da il messaggio di errore indicato.
Saluti
Wolfgang
P.S. solo la sera sono il albergo e posso accendere il mio PC, durante il giorno leggo solo le mie mail quando tempo e rete me lo permettono
Import/export Excel files - Esempio ok!
Posted: Sun Aug 20, 2023 8:30 pm
by Gfb22
Grazie e ...Buone ferie: ci aggiorniamo quando rientri al lavoro e non ho fretta...
Ho comunque provato e, pur avendo le .DLL tra le references, mi da lo stesso errore.
gfb
Import/export Excel files - Esempio ok!
Posted: Mon Aug 21, 2023 6:25 am
by wriedmann
Ciao Gian Ferruccio,
sono di nuovo al lavoro <g>.
Prova ad aggiungere un
in testa al file prg dove stai usando la classe.
Saluti
Wolfgang
Import/export Excel files - Esempio ok!
Posted: Mon Aug 21, 2023 8:25 pm
by Gfb22
Wolfgang, eccomi.
Con il tuo ultimo suggerimento le cose vanno meglio: si è passati da 27 errori si è passati a solo 3 errori che ti scrivo di seguito come codice:
Code: Select all
error XS0144: Cannot create an instance of the abstract type or interface 'XSharp.Tools.XlsxFile.IXlsxFile' 92,3 Start_Excel.prg StandardShellWindow:SalvaDBF
error XS0103: The name 'LENNUM' does not exist in the current context 126,55 Start_Excel.prg StandardShellWindow:SalvaDBF
error XS0144: Cannot create an instance of the abstract type or interface 'XSharp.Tools.XlsxFile.IXlsxFile' 184,4 Start_Excel.prg StandardShellWindow:SalvaXLSX
Compilation failed (3 errors, 5 warnings)
- Due degli errori sono relativi a XlsxFile;
- un errore relativo alla funzione LENNUM(n) che in VO funziona e indica la lunghezza complessiva di un numero (compreso segno e virgola) che in VO ho usato per determinare la struttura del file DBF che deve accogliere i valori di un foglio di Excel. In X# non c'è una funzione analoga?
Grazie e buon lavoro!
gfb