Escribir un fichero Excel desde ASP

  • Por
Cómo generar utilizando ASP un archivo CSV, compatible con Excel y otras hojas de cálculo, a partir de una tabla de la base de datos
Desde una página programada en ASP podemos obtener múltiples salidas, aparte de la tradicional en una página web. En este caso vamos a ver cómo realizar una salida en un formato de tipo CSV, que es un archivo compatible con Microsoft Excel u otros sistemas de hoja de cálculo comunes. El archivo CSV, para el que no lo sepa, es en realidad un fichero de texto en el que se ponen los valores de cada una de las columnas separados por comas y cada fila de valores en una línea independiente.

Veremos cómo conseguir un archivo CSV en el que figuran unos valores obtenidos desde una base de datos. Para ello vamos a apoyarnos en un script que se distribuye como código abierto en licencia GNU. Este tipo de licencia implica que el Script es gratuito y se puede distribuir, utilizar o modificar de cualquier manera, siempre que se cite la procedencia original.

En concreto, el script al que nos referimos se llama GenerateXSL, desarrollado por Brain Scan Studios, que se puede obtener en la dirección http://www.brainscanstudios.com/dev_projects/GenerateXLS/.

El script se puede instalar en cualquier servidor ASP, en un sitio web o en un servidor local o de Intranet, y se puede modificar fácilmente. Para utilizarlo en nuestros trabajos simplemente tendríamos que modificar unas variables. Para empezar, la variable "sDSN" que contiene el DSN origen de nuestra base de datos. También debemos modificar la variable "sFields", para asignarle los nombres de los campos de la base de datos, y "sTable", para indicar el nombre de la tabla.

El script, que podemos modificar para ajustarlo a nuestras necesidades, es el siguiente:

<%@ Language=VBScript %>
<%
' GenerateXLS Version 1.0 by Brian Kirsten (bkirsten@brainscanstudios.com)
' 1st modified 11/29/00
' 2nd modification 10/25/02
' copyright Ó 2000 Brain Scan Studios, Inc. (http://www.brainscanstudios.com)
' source distributed under the gnu general public license.
' let me know if your site is using the code i will put a link up to your page!

Dim sTable
Dim sDSN
Dim sFields

sDSN = "<DSN>" 'Name of your DSN
sFields = "<FIELDS>" 'List of fields comma delimited
sTable = "<TABLE_NAME>" 'Name of your table or View

Set DB = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")

DB.Open sDSN

RS.Open "select "& sFields &" from "& sTable,DB

Response.ContentType = "application/csv"
Response.AddHeader "Content-Disposition", "filename=mydata.csv;"
' lets print the fields on top

for i = 0 to RS.Fields.Count-1
if i = (RS.Fields.Count - 1) then
Response.Write lcase(RS.Fields(i).Name)
else
Response.Write lcase(RS.Fields(i).Name) & ","
end if
next

Response.write vbNewLine
Response.write vbNewLine

while not RS.EOF

for u=0 to RS.Fields.Count - 1
if u = (RS.Fields.Count - 1) then
Response.Write RS.Fields(u).Value
else
Response.Write RS.Fields(u).Value & ","
end if
next

response.write vbNewLine

rs.MoveNext
wend

Response.write vbNewLine
Response.write vbNewLine

Set RS = Nothing
Set DB = Nothing

%>


Podemos acceder a la página de los autores del script , donde podemos encontrar también un enlace para ver el ejemplo en funcionamiento.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

agustin

17/11/2006
No funciona el link para ver el ejemplo funcionando. Este codigo no me genera el archivo

Willy

01/8/2007
Muy bueno e interesante ,pero,la publicidad distractora y en algunos casos llenas de morbo ,distorsionan el objetivo principal ,dale más seriedad a tus paginas ,yo creo que a la mayoría de los profesionales que visitan tu interesante sitio ,no le interesan ni los juegos de azar ni el morbo sexual,tu trabajo brillante ,la publicidad deprimente.

oscar

07/3/2013
dos select en el mismo csv
hola se puede hacer esto:

rs.open select ....
rs.open select ....

y guardarlo en el mismo csv?
o de que forma se pueden hacer dos select para guardarlos en el mismo archivo csv?

Response.ContentType = . . .
Response.AddHeader . . .