#442 - Esportare dati da Excel verso XML con un HTTPHandler di ASP.NET

Ultimamente mi sono state fatte diverse richieste su come esportare dati da Excel verso altri formati.
Così mi è venuta l'idea per questo script, che in realtà potete riciclare senza grossi problemi anche per altre fonti dati.
Per fare una cosa carina, ho scelto di utilizzare gli HTTP Handlers di ASP.NET. In pratica, sono delle classi che tramite interfacce particolari, si mettono in mezzo tra la richiesta vera e propria ed il risultato.
In parole povere, io richiamo sul server una pagina excel.ashx che in realtà non esiste. Il motore ASP.NET troverà associato, nel web.config, l'hanlder da richiamare e passerà a quest'ultimo il contesto corrente.
In questo modo, risulta davvero facile, sfruttando l'estensione .ashx, implementare dei propri handler particolari, che possono compiere le operazioni più disparate.
In particolar modo, nel web.config dobbiamo aggiungere questo pezzo di codice nel ramo system.web:

<httpHandlers>
  <add verb="*" path="excel.ashx" type="ExcelHandler, ExcelHandler" />
</httpHandlers>

A questo punto non dobbiamo farlo altro che creare la classe, che nel nostro caso sarà:

Imports System.Data
Imports System.Data.Oledb
Imports System.Web

Public Class ExcelHandler
    Implements IHttpHandler

    Public Sub ProcessRequest(ByVal Context As HttpContext) Implements System.Web.IHttpHandler.ProcessRequest

        ' ricavo gli oggetti Request e Response
        Dim Request as HttpRequest = Context.Request
        Dim Response as HttpResponse = Context.Response

        Response.ContentType = "text/xml"

' se non ci sono fogli specificati, esce dalla sub
if Request("foglio") is nothing then Exit Sub

' ricava il path fisico
Dim sorgente as String = Request.PhysicalApplicationPath & "sorgente.xls"

Dim conn As New OledbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sorgente & "; Extended Properties=""Excel 8.0;HDR=No;""")

Dim strSQL as String = "SELECT * FROM [" & Request("foglio") & "]"

Dim query as OledbDataAdapter = New OledbDataAdapter(strSQL, conn)
  Dim querydataset as DataSet = New DataSet()
query.Fill(querydataset)

' invio le intestazioni XML
Response.write("<?xml version=""1.0"" encoding=""iso-8859-1""?>")

' invio output sull'OutputStream di Response
querydataSet.WriteXML(Response.OutputStream)

    End Sub

    Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
        Get
            Return True
        End Get
    End Property

End Class

Infine è sufficiente procedere alla compilazione, copiando l'assembly generato nella directory \bin\.
A questo punto per richiamare un foglio specifico, basterà effettuare una chiamata di questo tipo
http://localhost/excel.ashx?foglio=Foglio1$

Se qualche passaggio non fosse chiaro, trovate tutto riportato, compreso di .bat per la compilazione, nell'archivio allegato a questo script.

Nota: Questo script contiene un allegato.


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

chiccosimo scrive:
#442 - Esportare dati da Excel verso XML con un HTTPHandler di ASP.NET

Ho provato ad usare lo script da http://localhost/excel.ashx?foglio=Foglio1$ ma mi dà errore: 404 file non trovato: /excel.ashx. Quale potrebbe essere...
giovedì 4 settembre 2003 | 3 risposte
Stefanix scrive:
#442 - Esportare dati da Excel verso XML con un HTTPHandler di ASP.NET

Ciao sono un po imbranato ma non riesco a capire più di una cosa.la nuova classe ExcelHandler la devo creare in un progetto a parte e poi copiare il ...
martedì 24 ottobre 2006 | 1 risposta
giallu.net scrive:
Domanda per Daniele Bochicchio riguardo allo script 442

Ciao Daniele,Ho utilizzato lo script 442 che esporta dati excel su formato Xml, ho seguito tutte le sue istruzioni per poter utilizzare la sua classe....
mercoledì 22 gennaio 2003 | 3 risposte

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC