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

di Daniele Bochicchio, in ASP.NET, HttpHandler, web.config,

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.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi