Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
ADO.NET ed Excel
lunedì 12 luglio 2004 - 20.16
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Revenge
Profilo
| Newbie
6
messaggi | Data Invio:
lun 12 lug 2004 - 20:16
ho creato una procedura che effettua l'export di alcuni dati presenti sul datagrid su excel sfruttando la COM.
Ovviamente, avendo installato Excel 2002, mi utilizza la versione 10.0 e se vado su un sistema in cui è installato Excel 2000 il tutto non funziona.
Stavo pensando così di provarci con ADO.NET impostando la versione ad Excel 8.0 con cui spero di mantenere la compatibilità tra le versioni 2000 e 2002.
La procedura è questa:
Private Sub EsportaExcelAdo()
Dim sConnectionString As String
sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & GetPath() & "\template.xls;" & _
"Extended Properties=Excel 8.0"
Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)
objConn.Open()
Dim objCmd As New System.Data.OleDb.OleDbCommand
objCmd.Connection = objConn
objCmd.CommandText = "Update [Raccolta Dati$] SET F12 = '1'"
Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
objConn.Close()
End Try
End Sub
La messagebox mi restituisce:
Impossibile aggiornare "(espressione)". Campo non aggiornabile.
Quale può essere il problema?
Grazie per l'eventuale aiuto,
Revenge.
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
lun 12 lug 2004 - 23:03
Ci sono varie soluzioni per risolvere questo problema. Una è di utilizzare gli Assemblies in modo da non usare l'interoperabilità direttamente da .NET ma vedo tu hai scelto un'altra strada.
Continuando su quella che hai intrapreso tu puoi provare così. Questo è il procedimento per un'applicazione Web.
(Si parte dal presupposto che tu abbia una Datagrid con dentro i dati di nome DDGrid)
Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
System.IO.StringWriter SW= new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter HTW= new System.Web.UI.HtmlTextWriter(SW);
DDGrid.RenderControl(HTW);
string str_tw = HTW.ToString();
Response.Write(str_tw);
Response.Flush();
Response.Close();
Così facendo se sul client è installato Excel, si aprirà automaticamente mostrandoti il DataGrid convertito in foglio di Excel. Puoi operare anche diversamente magari producendo un file CSV cioè con i valori separati da virgola.
Poi da Excel sfruttando la funzione testo in colonne riadattarlo.
Scegli un po' tu.
ciao
david
Revenge
Profilo
| Newbie
6
messaggi | Data Invio:
mar 13 lug 2004 - 00:22
beh, diciamo che questo sistema può andar bene se si vuole creare un nuovo file xls (o csv).
In realtà io ho bisogno di popolare alcune celle che fanno parte di un template, quindi ho proprio bisogno di scrivere a partire da un file xls esistente (magari salvandolo poi in un altro modo, cos' da mantenere intatto il template).
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mar 13 lug 2004 - 22:44
Non hai preso in esame l'opportunità dei PIAs Assemblies ?
Purtroppo un file di Excel difficilmente è gestibile senza fare ricorso alle librerie Excel/Office che mettono a disposizione l'intero Object Model che è lo stesso che si usa anche con VBA.
E' chiaro che cambiando la versione di Office installata sulla macchina, cambiano anche gli Assemblies da utilizzare.
ciao
david
Revenge
Profilo
| Newbie
6
messaggi | Data Invio:
mar 13 lug 2004 - 23:12
beh, si......in realtà li ho già usati aggiungendo i reference agli interop di excel (Excel 11.0 Object Library)
questa volta ho provato ad aggiungere come reference il file Excel8.olb, beh, magari potrebbe funzionare......dipende dal funzionamento della retrocompatibilità.
domani lo proverò (sul mio pc funziona, però lo voglio provare su un pc con office2000)
ciao, revenge
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mar 13 lug 2004 - 23:43
File .olb io non ne ho mai usati.
Se uso Office 2003, installo i PIAs già contenuti in Office 2003.
Se usi Office XP invece bisogna scaricarli a parte.
Se usi Office 2000 è necessario creare dei wrapper referenziando direttamente l'oggetto COM roba che fa automaticamente l'ambiente.
Non so poi se referenziando i PIAs di Office 2003 poi si può operare liberamente anche all'indietro.
Fai due prove e fammi sapere sono curioso.
ciao
david
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !