Import/export Excel files - Funziona!!
Moderator: wriedmann
Import/export Excel files - Esempio ok!
...Con l'ultimo esempio viene visualizzato anche il mio file Excel: benissimo!
Grazie.
gfb
Grazie.
gfb
gfb
Import/export Excel files - Esempio ok!
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:
-------------------
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 ...
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 ...
gfb
Import/export Excel files - Esempio ok!
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:
per aggiungere un foglio:
per scrivere dati:
e poi per salvarlo:
Saluti
Wolfgang
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()
Code: Select all
if _oXlsxFile:NumSheets == 0
oXlsSheet := oXlsxFile:AddSheet( "Foglio dati" )
else
oXlsSheet := oXlsxFile:GetSheet( 1 )
endif
Code: Select all
oXlsSheet:SetValue( nRiga + 4, 2, "nome cliente" )
oXlsSheet:SetValue( nRiga + 4, 3, "articolo" )
Code: Select all
oXlsxFile:SaveAs( cXlsFileName )
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Import/export Excel files - Esempio ok!
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!
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!
gfb
Import/export Excel files - Esempio ok!
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
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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Import/export Excel files - Esempio ok!
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
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
gfb
Import/export Excel files - Esempio ok!
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
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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Import/export Excel files - Esempio ok!
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
Ho comunque provato e, pur avendo le .DLL tra le references, mi da lo stesso errore.
gfb
gfb
Import/export Excel files - Esempio ok!
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
sono di nuovo al lavoro <g>.
Prova ad aggiungere un
Code: Select all
using XSharp.Tools.XlsxFile
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Import/export Excel files - Esempio ok!
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:
- 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
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)
- 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
gfb