Import/export Excel files - Funziona!!

Forum dedicato ai programmatori di X# in lingua italiana – Italian language forum

Moderator: wriedmann

User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post by wriedmann »

Ciao Gian Ferruccio,
devo vedere perchè il tipo di variabile cambia. Ma mi serve un po di tempo (posso guardare non prima di stasera).
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Gfb22
Posts: 105
Joined: Sat Oct 08, 2022 7:43 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post by Gfb22 »

Buongiorno.
Ho guardato e fatto alcune prove ma il risultato è lo stesso: oSheet:SetValue(...) con valori numerici in VO registra correttamente i valori in campi numero (su cui possono essere fatti calcoli), mentre con X# i dati nel file di Excel sono numeri ma formattati come campi testo.
Ecco il ciclo che ho usato per scrivere i dati in Excel:

Code: Select all

                do WHILE !oFileDBF:EOF
                    nRow    := oFileDBF:Recno + 1 
                    FOR nCol    := 1 to nCols
                        if aStruct[nCol, DBS_TYPE] == "D"    // Data 
                            oSheet:SetValue( nRow, nCol, DToC(oFileDBF:FIELDGET( nCol) ) )
                        else
                            oSheet:SetValue( nRow, nCol, oFileDBF:FIELDGET( nCol) )
                        endif
                    NEXT nCol
                    oFileDBF:Skip( 1 )
                ENDDO
E' poi strano il diverso comportamento, con lo stesso codice e stesse .DLL, tra VO e #X.
Cosa potrei provare per avere i file Excel corretti?
Grazie per ogni suggerimento...
Gfb
gfb
User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post by wriedmann »

Ciao Gian Ferruccio,
mi sono messo questo controllo in programma per oggi pomeriggio - al momento devo finire altre cose.
Penso che il problema sia che l'Interfaccia COM faccia qualche trasformazione del valore da "usual" a un tipo .NET che in questo caso bisogna fare in maniera manuale.
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post by wriedmann »

Ciao Gian Ferruccio,
sembra che devi trasformare in numerico in maniera esplicita:

Code: Select all

do case
case aStruct[nField, DBS_TYPE] == "D"    // Data
  oXlsxSheet:SetValue( nRow, nField, DToC( oServer:FieldGet( nField ) ) )
case aStruct[nField, DBS_TYPE] == "N"    // Numeric
  oXlsxSheet:SetValue( nRow, nField, ( decimal ) oServer:FieldGet( nField ) )
otherwise
  oXlsxSheet:SetValue( nRow, nField, oServer:FieldGet( nField ) )
endcase
TestXlsXFile.zip
(7.78 KiB) Downloaded 170 times
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Gfb22
Posts: 105
Joined: Sat Oct 08, 2022 7:43 pm
Location: Italy

Import/export Excel files - Funziona!!

Post by Gfb22 »

Fantastico: così funziona e i campi numero vengono scritti correttamente in Excel.
E' stato sufficiente aggiungere, solo per #X (con #ifdef __XSHARP__) la riga 

Code: Select all

oXlsxSheet:SetValue( nRow, nField, ( decimal ) oServer:FieldGet( nField ) )
Grazie!!!
Se pensi che possa essere utile ho modificato i tuoi suggerimenti ed esempi creando un modulo generico che consente di trasformare file DBF -> in XLSX e viceversa e posso condividerlo come MEF, anche con una piccola app di esempio, giusto il tempo di creare l'app...

gfb
 
gfb
User avatar
wriedmann
Posts: 3759
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files - Funziona!!

Post by wriedmann »

Ciao Gian Ferruccio,
Benissimo che funziona addesso come ti serve!
Devo ammettere che la trasformazione tra DBF e Excel non mi è mai servita.
Ho invece una funzione generica (in VO) che trasforma il contenuto di un ListView in una tabella Excel. Questo permette ai miei clienti di esportare il risultato di una ricerca.
Poi mi capita sempre più spesso che i clienti mi chiedono le statistiche non più come stampa, ma come Excel compreso le formule per somme ecc.
Saluti
Wolfgang
 
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Post Reply