xsharp.eu • Import/export Excel files - Funziona!! - Page 4
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
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:

Code: Select all

oXlsxFile:SaveAs( cXlsFileName )
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!
​​​​​​​ 
ErroriCompiler.txt
(2.97 KiB) Downloaded 123 times

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

Code: Select all

using XSharp.Tools.XlsxFile
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