2009-01-13 151 views
10

Tengo un número de tablas html generadas que necesito generar como un archivo de Excel. El sitio está codificado en ASP clásico. es posible? ¿Podría hacerse de alguna manera utilizando las bibliotecas de Open Office?Cómo generar un archivo Excel * .xls desde ASP clásico


EDITAR: Hasta ahora, he intentado algunas de las sugerencias, pero parece fallar. Idealmente, quiero que el usuario pueda hacer clic en un enlace que comenzará la descarga de un archivo .xls. Este código:

<%@ Language=VBScript %> 
<% option explicit 

Response.ContentType = "application/vnd.ms-excel" 
Response.AppendHeader "content-disposition", " filename=excelTest.xls" 
%> 
<table> 
    <tr> 
     <th>Test Col 1</th> 
     <th>Test Col 2</th> 
     <th>Test Col 3</th> 
     <th colspan="2">Test Col 4</th> 
     <th>Test Col 6</th> 
     <th>Test Col 7</th> 
    </tr> 
    <tr> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
    </tr> 
</table> 

parece fallar cuando IE7 se utiliza para obtener la página. IE dice que "no puede descargar excelTest.asp" y que "el sitio solicitado no está disponible o no se puede encontrar".

+0

Hay comentarios al final de esto: http://blogs.msdn.com/vsofficedeveloper/pages/Office-2007-Open-XML-MIME-Types.aspx – Fionnuala

+0

Los únicos comentarios que veo en esa página son algunos notas adicionales que indican los cambios que deben realizarse en el servidor para que los tipos mime sean compatibles. ¿Estás diciendo que esta es la pieza que me falta? – cdeszaq

+0

Tengo una pregunta relacionada aquí, apreciar si alguien puede echar un vistazo, http://stackoverflow.com/questions/1383366/generating-excel-file-error – George2

Respuesta

18

Es AddHeader, no AppendHeader.

<%@ Language=VBScript %> 
<% Option Explicit 

Response.ContentType = "application/vnd.ms-excel" 
Response.AddHeader "Content-Disposition", "attachment; filename=excelTest.xls" 
%> 
<table> 
    <tr> 
     <td>Test</td> 
    </tr> 
</table> 

Actualización: He escrito un post sobre cómo generate Excel files in ASP Classic. Contiene una pieza de código bastante útil para generar archivos xls y csv.

+0

Esto funciona como un encanto! ¡Gracias! – cdeszaq

+0

Tengo una pregunta relacionada aquí, agradezco si alguien pudiera echar un vistazo, http://stackoverflow.com/questions/1383366/generating-excel-file-error – George2

+0

Gracias, Kristof Neirynck !! Esto me ayudó a entender cómo lograr que IE reconozca el archivo Excel como descarga. – ckpepper02

0

Siempre puede exportar la tabla HTML a un documento XLS. Excel hace un buen trabajo entendiendo las tablas HTML.

Otra posibilidad es exportar las tablas HTML como un archivo CSV o TSV, pero necesitaría configurar el formateo en su código. Esto no es muy difícil de lograr.

Hay algunas clases en Microsoft.Office.Interop que te permiten crear un archivo de Excel de forma programática, pero siempre he encontrado que es un poco torpe. Puede encontrar una versión .NET de creating a spreadsheet here, que debería ser bastante fácil de modificar para ASP clásico.

En cuanto a .NET, siempre me ha gustado CarlosAG's Excel XML Writer Library. Tiene un buen generador para que pueda configurar su archivo de Excel, guardarlo como una hoja de cálculo XML y genera el código para hacer todo el formateo y todo. Sé que no es ASP clásico, pero pensé que lo lanzaría allí.


Con lo que estamos tratando anterior, trate de añadir la cabecera:

"Content-Disposition", "attachment; filename=excelTest.xls" 

ver si funciona. Además, siempre lo uso para el tipo de contenido:

Response.ContentType = "application/octet-stream" 
    Response.ContentType = "application/vnd.ms-excel" 
+0

VBScript produce un error: objeto no admite esta propiedad o método: 'Response.AppendHeader' – cdeszaq

0

Hay un truco 'barato y sucio' que he utilizado ... shhhh no decirle a nadie. Si imprime texto delimitado por tabuladores y crea el nombre de archivo * .xls, Excel lo abre sin objeciones, preguntas o advertencias. Así que simplemente genere los datos en un archivo de texto con delimitación de tabulación y puede abrirlo con Excel u Open Office.

+1

En realidad Excel 2007 mostrará un cuadro de diálogo de advertencia si un archivo está en formato TSV, pero su extensión dice .xls No conozco ninguna forma de evitar esto tampoco. –

+0

crea el archivo de texto CSV pero le da una extensión .csv. Excel lo abrirá sin mensaje. – Tester101

+1

Dos posibles problemas: (1) Microsoft Excel recortará espacios principales y ceros; y (2) Microsoft Excel 2010 presentará una advertencia al abrir el archivo. # 1 se puede resolver envolviendo el texto con = "{cell-data}" (a través de: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndExcel) – iokevins

0

Tuve el mismo problema hasta que agregué Response.Buffer = False. Intente cambiar el código a lo siguiente.

Response.Buffer = False Response.ContentType = "application/vnd.ms-Excel" Response.AddHeader "Content-Disposition", "unión; nombre de archivo = excelTest.xls"

El único problema que tengo ahora es que cuando Excel abre el archivo recibo el siguiente mensaje.

El archivo que está intentando abrir, 'FileName [1] .xls', tiene un formato diferente al especificado por la extensión de archivo. Verifique que el archivo no esté dañado y provenga de una fuente confiable antes de abrir el archivo. ¿Quieres abrir el archivo ahora?

Cuando abre el archivo, todos los datos aparecen en columnas separadas, pero la hoja de cálculo es toda blanca, sin bordes entre las celdas.

Espero que ayude.

Cuestiones relacionadas