2012-02-20 56 views
11

Tengo una tabla html (no Gridview) y no tiene encabezado ni filas adecuadas. En cambio, tiene estructura y datos personalizados. Quiero exportar esta tabla a Excel. ¿Cómo puedo usar ASP.NET? enter image description hereExportar tabla HTML a Excel utilizando ASP.NET

Las etiquetas son texto fijo y los valores enteros provienen de la base de datos. Por lo tanto, la estructura de la tabla se fija solo los valores enteros/decimales cambian.

+1

esto tiene que ser un proceso repetible? o cortar y pegar desde su página web una vez? – Randy

+2

¿De dónde vienen los datos para la tabla? – Didaxis

+0

A diferencia de otra persona, explicaré mi voto negativo: esta es una pregunta pobre sin detalles suficientes para obtener una respuesta real de ningún valor. Proporcione más detalles, o sospecho que esta pregunta se cerrará – Didaxis

Respuesta

8

Desea exportar la tabla HTML (No Gridview) estructura personalizada y datos a Excel utilizando ASP.NET.

pruebe el siguiente método

  1. ofrecen los ID y añadir el atributo runat="server"

    <table id="tbl" runat="server" >

  2. Agregue el código siguiente

    Response.ContentType = "application/x-msexcel"; 
    Response.AddHeader("Content-Disposition", "attachment; 
    filename=ExcelFile.xls"); 
    Response.ContentEncoding = Encoding.UTF8; 
    StringWriter tw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(tw); 
    tbl.RenderControl(hw); 
    Response.Write(tw.ToString()); 
    Response.End(); 
    
+0

Muy bien. ¿Cómo puedo poner una imagen en el archivo de Excel, o llenar el color de la celda, etc. Lo que quiero decir es formatear el archivo de Excel después de exportarlo? – Haminteu

+0

Compruebe esto http://stackoverflow.com/questions/7172282/give-background-color-to-excel-sheet-in-asp-net/9858841#9858841 y http://stackoverflow.com/questions/9410401/adding -custom-header-to-the-excel-file/9653194 # 9653194 –

+0

Estoy tratando de usar la función de exportación desde un elemento web visual en mi sitio SP. 'Response' me está dando un error. – SearchForKnowledge

0

No hay manera automatizada. Pero podría usar el mismo código para crear la tabla y escribirla en la salida en su lugar. Si lo escribe como un simple archivo CSV, el usuario puede cargarlo en Excel simplemente haciendo clic en el archivo descargado.

Al configurar los encabezados correctos, puede dirigir el navegador para tratar el contenido como una descarga en lugar de una página web. Publiqué el código para hacer esto en this article.

+1

¿Quién es el bozo que vota respuestas sin una explicación? –

+0

No soy el "bozo" de votación descendente :), pero tal vez su respuesta fue rechazada porque el OP declara explícitamente que no está en un GridView, ni tiene el OP insinuado de dónde provienen estos datos. Por lo que sabemos, esta es una tabla HTML en un sitio sobre el cual OP no tiene control. – Didaxis

+0

@ErOx: Sí, punto tomado. :) Desde que OP dijo que está usando ASP.NET, voy a suponer que está haciendo esto desde su propio sitio. Pero estoy de acuerdo en que hay ambigüedad en este asunto. –

2

Puede utilizar por debajo de código:

Response.ContentType = "application/force-download"; 
Response.AddHeader("content-disposition", "attachment; filename=Print.xls"); 
Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">"); 
Response.Write("<head>"); 
Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-  8\">"); 
Response.Write("<!--[if gte mso 9]><xml>"); 
Response.Write("<x:ExcelWorkbook>"); 
Response.Write("<x:ExcelWorksheets>"); 
Response.Write("<x:ExcelWorksheet>"); 
Response.Write("<x:Name>Report Data</x:Name>"); 
Response.Write("<x:WorksheetOptions>"); 
Response.Write("<x:Print>"); 
Response.Write("<x:ValidPrinterInfo/>"); 
Response.Write("</x:Print>"); 
Response.Write("</x:WorksheetOptions>"); 
Response.Write("</x:ExcelWorksheet>"); 
Response.Write("</x:ExcelWorksheets>"); 
Response.Write("</x:ExcelWorkbook>"); 
Response.Write("</xml>"); 
Response.Write("<![endif]--> "); 
StringWriter tw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(tw);  
tbl.RenderControl(hw); 
Response.Write(tw.ToString()); 
Response.Write("</head>"); 
Response.flush(); 

También es advicable para dar CSS en línea si desea que la salida exportada se ven exactamente iguales que su interfaz de usuario. Si aplica clases de CSS a la tabla, entonces no se mostraría en Excel exportado.

+1

no necesariamente necesitas poner CSS en línea puedes agregar las clases de estilo en la cabeza y funcionará normalmente – Kronass

1

Si dtReport contiene la tabla (es decir, datos que pueden exportar) entonces podemos exportar la tabla de Excel utilizando el siguiente LOC y también podemos formatear la cabecera

if (dtReports != null && dtReports.Rows.Count > 0 && !string.IsNullOrEmpty(formName)) 
      { 
       string filename = formName.ToUpper() + ParsConstant.XLS_EXTENSION; 
       StringWriter tw = new StringWriter(); 

       using (HtmlTextWriter hw = new HtmlTextWriter(tw)) 
       { 

        //Binding Datatable to DataGrid. 
        DataGrid dgGrid = new DataGrid(); 
        dgGrid.DataSource = dtReports; 
        dgGrid.DataBind(); 

        //Some Properties for the Header 
        dgGrid.HeaderStyle.Font.Bold = true; 
        dgGrid.HeaderStyle.Font.Size = 13; 

        //Get the HTML for the control. 
        dgGrid.RenderControl(hw); 


        Response.ContentType = "application/vnd.ms-excel"; 
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ""); 
        //Response.Write("<style> TD { mso-number-format:\\@; } </style>"); 


        Response.Write(tw.ToString()); 
        Response.End(); 
       } 
      } 

usando MSO formato no será evitar liderando cero, pero convertirá el texto a cadena que no es recomendable para hacer operaciones.