MasterDrive.it   
Vai indietro   MasterDrive.it > Software Development > Visual Basic .Net



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 08-03-2010, 21:43   #1 (permalink)
Nuovo della community

 
22 Messaggi

Gmotta novizio della comunita' ( + 10 )
Esportare dati excel - Numeri memorizzati come testo

Scusate se ritorno sui miei problemi con excel; questa la mia difficoltà:
Ho espostato un arraylist in excel, tutto bene se non fosse che i numeri compaiono in excel con la formatazione testo.
Ovviamente la loro formatazione deve essere numerica in modo che sul foglio elettronico si possano compiere calcoli.Vi ringrazio per l'aiuto


Ultima modifica di elisab : 14-03-2010 a 02:41.
Gmotta non è in linea   Bookmark and Share Rispondi quotando
Vecchio 09-03-2010, 20:25   #2 (permalink)
Very Important Person

 L'avatar di elisab

 
732 Messaggi

elisab e' una persona affidabile ( + 250 )elisab e' una persona affidabile ( + 250 )elisab e' una persona affidabile ( + 250 )elisab e' una persona affidabile ( + 250 )
Ciao
stai aprendo il foglio di excel come database e poi fai l'INSERT?
Nel link che ti avevo segnalato nell'altra discussione c'era un riferimento al problema sui tipi di dato (col traduttote automatico è italiettano, ma si capisce).
Quote:
Tipi di dati
A differenza di un database tradizionale, non è possibile diretto per specificare i tipi di dati per le colonne in tabelle. Il provider OLE DB, invece, esegue la scansione otto righe di una colonna per ipotesi il tipo di dati per il campo.
Quote:
È possibile modificare il numero di righe per l'analisi specificando un valore compreso tra uno (1) e sedici (16) per il MAXSCANROWS impostazione le proprietà estese della stringa di connessione.
A causa di un bug non è possibile impostare MAXSCANROWS nella stringa di connessione.
Quando tu cerchi d'inserire un numero (con i parametri creando il parametro col tipo di dato corretto e assegnando come Value un numero, oppure se usi una query concatenata assicurandoti che il valore non sia tra apici) vengono controllate le prime 8 righe e se rileva che la colonna contiene stringhe il numero è comunque riconosciuto come stringa.

Il problema c'è se il foglio che devi riempire è vuoto, se invece fai l'inserimento in un foglio che contiene già dei valori e la colonna è riconosciuta come contenete numeri i successivi, se inseriti correttamente, sono dati numerici.

Penso che non si possa fare gran che se non usare l'automazione per modificare il tipo di dato o, in alternativa, usare l'automazione per fare l'inserimento.

Ciao
__________________
Sei nuovo? Hai già letto il nostro regolamento??
Hai dubbi sulle funzionalità del forum? Allora dai un'occhiata alle FAQ

L'alito del mio gatto sa di cibo per gatti.

Ultima modifica di elisab : 09-03-2010 a 20:55.
elisab non è in linea   Bookmark and Share Rispondi quotando
Vecchio 09-03-2010, 22:15   #3 (permalink)
Nuovo della community

 
22 Messaggi

Gmotta novizio della comunita' ( + 10 )
Elisab, ti ringrazio per i consigli sempre puntuali e prezioni.
Ho aggirato il problema della formatazione che, in effetti era di difficile soluzione; ho adottato una diversa tecnica di scrittura su excel però la transazione è molto più lenta.
Mi puoi spiagare che differenze ci sono tra queste due "tecniche" :

I° (mi dava il problema della formatazione ma era molto più veloce):
codice:
Dim cn As New OleDb.OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Excell.xls; Extended Properties = Excel 8.0")
Dim strSQL As String
.
.
strSQL = "insert into [Foglio1$] values ('" & dbclear(r, 0) & "')"
Dim dm As New OleDb.OleDbCommand(strSQL, cn)
dm.ExecuteNonQuery()

II° (nessun problema ma è più lenta)
codice:
Dim objapplic As Excel.Application
Dim ct AsInteger
Dim range AsString
objapplic = New Excel.Application
Dim worktable As Excel.Workbook
worktable = objapplic.Workbooks.Open("C:\Excell.xls")
.
.
DoUntil ct = cc
range = "A" & LTrim(Str(ct + 1))
worktable.Sheets("Foglio1").range(range) = dbclear(ct, 0)
ct = ct + 1
Ti ringrazio e saluto

Ultima modifica di elisab : 10-03-2010 a 19:05. Motivo: Ho aggiustato il post e formattato il codice
Gmotta non è in linea   Bookmark and Share Rispondi quotando
Vecchio 10-03-2010, 21:21   #4 (permalink)
Very Important Person

 L'avatar di elisab

 
732 Messaggi

elisab e' una persona affidabile ( + 250 )elisab e' una persona affidabile ( + 250 )elisab e' una persona affidabile ( + 250 )elisab e' una persona affidabile ( + 250 )
Ciao
nel primo caso ti connetti ad Excel ed effettui la modifica, inserimento e interrogazione del foglio come se fosse un database. Excel non è un vero db, e il problema sui tipi di dati evidenzia un suo limite nell'accedervi come semplice db.

Per provare ad inserire un numero nel foglio nella tua INSERT non devi mettere gli apici, rimane comunque il problema del controllo preventivo del tipo di dati sulla colonna.
codice:
strSQL = "insert into [Foglio1$] values ('" & dbclear(r, 0) & "')"

Excel come foglio di calcolo ha tutta una serie di funzionalità che puoi manovrare da Vb.Net usando l'automazione (secondo esempio), che ti consente di chiamare metodi e proprietà che sono specifiche di attività di Excel.

Ad esempio, quando fai una INSERT ti inserisce i dati in coda (un'eventuale cella vuota a cui è stato modificato il formato cella è riconosciuta come piena) con l'automazione puoi decidere in quale cella scrivere e che formattazione attribuire alle celle.

Per velocizzare la scrittura nel foglio con l'automazione assegna una matrice (con più righe) ad un intervallo di celle. Guarda l'esempio in questo articolo.


Ciao

PS Per postare il codice premi il pulsante # presente nella barra e poi incolla il codice all'interno dei tag [code][/code]
__________________
Sei nuovo? Hai già letto il nostro regolamento??
Hai dubbi sulle funzionalità del forum? Allora dai un'occhiata alle FAQ

L'alito del mio gatto sa di cibo per gatti.
elisab non è in linea   Bookmark and Share Rispondi quotando
Vecchio 10-03-2010, 22:41   #5 (permalink)
Nuovo della community

 
22 Messaggi

Gmotta novizio della comunita' ( + 10 )
OK Grazie


Elisab,

ti ringrazio per la spiegazione chiara e per il link dell'articolo.

Sincuramente avrò modo di disturbare nuovamente con dubbi su vb.net.

Ciao

Gmotta non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum


Tutti gli orari sono GMT +2. Attualmente sono le 09:47.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.