Exportar datos a CSV con ASP clásico

Escrito por Programador ASP clásico en Código ASP clásico


El formato de archivo CSV (valores separados por comas) es un archivo de texto en el que puede almacenar datos tabulares, como los datos de una tabla de base de datos. Este formato se puede leer por varios programas de hojas de cálculo como Microsoft Excel y OpenOffice.org. Este formato no es adecuado para el almacenamiento de datos binarios.

El siguiente ejemplo de código de ASP clásico / VBScript le permite exportar datos de una tabla de base de datos a un archivo CSV. Se obtienen los datos a través de un objeto ADODB Recordset, se les da formato CSV y se envían al navegador junto con las cabeceras de respuesta apropiadas.

Este código ASP clásico debe ser guardado como una secuencia de comandos ASP en un servidor web y ejecutarlo vía web.

<%
sub Write_CSV_From_Recordset(RS)

'
' This sub-routine Response.Writes the content of an ADODB.RECORDSET in CSV format
' The function closely follows the recommendations described in RFC 4180:
' Common Format and MIME Type for Comma-Separated Values (CSV) Files
' http://tools.ietf.org/html/rfc4180
'

if RS.EOF then

'
' There is no data to be written
'
exit sub

end if

dim RX
set RX = new RegExp
RX.Pattern = "\r|\n|,|"""

dim i
dim Field
dim Separator

'
' Writing the header row (header row contains field names)
'

Separator = ""
for i = 0 to RS.Fields.Count - 1
Field = RS.Fields(i).Name
if RX.Test(Field) then
'
' According to recommendations:
' - Fields that contain CR/LF, Comma or Double-quote should be enclosed in double-quotes
' - Double-quote itself must be escaped by preceeding with another double-quote
'
Field = """" & Replace(Field, """", """""") & """"
end if
Response.Write Separator & Field
Separator = ","
next
Response.Write vbNewLine

'
' Writing the data rows
'

do until RS.EOF
Separator = ""
for i = 0 to RS.Fields.Count - 1
'
' Note the concatenation with empty string below
' This assures that NULL values are converted to empty string
'
Field = RS.Fields(i).Value & ""
if RX.Test(Field) then
Field = """" & Replace(Field, """", """""") & """"
end if
Response.Write Separator & Field
Separator = ","
next
Response.Write vbNewLine
RS.MoveNext
loop

end sub

'
' EXAMPLE USAGE
'
' - Open a RECORDSET object (forward-only, read-only recommended)
' - Send appropriate response headers
' - Call the function
'

dim RS1
set RS1 = Server.CreateObject("ADODB.RECORDSET")
RS1.Open "SELECT * FROM TABLE_NAME_HERE", "CONNECTION_STRING_HERE", 0, 1

Response.ContentType = "text/csv"

Response.AddHeader "Content-Disposition", "attachment;filename=export.csv"

Write_CSV_From_Recordset RS1
%>

Publicado el 05/06/2015 a las 11:08:14 hrs. | 651 visitas.

Subir
Web hosting by Somee.com