ADO.NET ed Excel

lunedì 12 luglio 2004 - 20.16

Revenge Profilo | Newbie

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

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

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

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

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

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
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 !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5