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 ClassInfine è 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.
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
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 ...
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....
Per inserire un commento, devi registrarti alla nostra community.









Stampa
Snippet
Download



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...
Continua »»» | Rispondi »»»