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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.