La función de exportación a Excel no funciona

Somsone me recomendó que use esta función para exportar mi tabla de datos a Excel, pero exporta el HTML, no solo los datos de la tabla. ¿Cómo puedo hacer que exporte los datos y el formato (ancho, color ...) solamente?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
function ExportHTMLTableToExcel()
{
   var thisTable = document.getElementById("table").innerHTML;
   window.clipboardData.setData("Text", thisTable);
   var objExcel = new ActiveXObject ("Excel.Application");
   objExcel.visible = true;

   var objWorkbook = objExcel.Workbooks.Add;
   var objWorksheet = objWorkbook.Worksheets(1);
   objWorksheet.Paste;
   alert('test');

}
</script>
  <title>Java Friends</title>
</head>
<body>
  <table id="table" style="font-weight: bold">
    <tr style="background-color:red"><td>a</td><td>b</td></tr>
    <tr><td>1</td><td>2</td></tr>
    <tr>
      <td colspan="2">
        <button onclick="ExportHTMLTableToExcel()">
            Get as Excel spreadsheet
        </button>
      </td>
    </tr>
  </table>    
</body>
</html>

Nota: esta función solo funciona en IE si las opciones de seguridad download unsigned activex control y download signed activex control están configurados para 'habilitar'

preguntado el 10 de mayo de 11 a las 14:05

2 Respuestas

Utilice este código, funciona bien para mí

public void ExportToSpreadsheet(DataTable table, string name)
        {
            try
            {
                HttpContext context = HttpContext.Current;
                context.Response.Clear();
                context.Response.ClearHeaders();
                String sr = string.Empty;
                sr += "<html><body><table>";
                sr += "<tr style=\"background-color:gray;color:white;\">";
                foreach (DataColumn column in table.Columns)
                {
                    sr += "<th>";
                    sr += column.ColumnName;
                    sr += "</th>";
                }
                sr += "</tr>";
                sr += Environment.NewLine;
                foreach (DataRow row in table.Rows)
                {
                    sr += "<tr>";
                    for (int i = 0; i < table.Columns.Count; i++)
                    {
                        sr += "<td>";
                        sr += row.ItemArray[i];
                        sr += "</td>";
                    }
                    sr += "</tr>";
                    sr += Environment.NewLine;
                }
                sr += "</table></body></html>";               
                context.Response.ContentType = "application/vnd.ms-excel";               
                context.Response.AddHeader("Content-Disposition", "attachment; filename=" + name + ".xls");                        
                context.Response.Write(sr);
                context.Response.Flush();
                context.Response.End();
                context.Response.Close();
            }
            catch (Exception ex)
            {

            }
        }

Espero que esto ayude.

respondido 15 mar '13, 11:03

El complemento jQuery DataTables TableTools le permitirá exportar muy fácilmente una tabla HTML a Excel, pero no manejará el formato.

Puede ver un ejemplo del complemento que se ejecuta aquí: http://www.datatables.net/extras/tabletools/

Puede que no maneje el formato, pero hace que exportar la tabla HTML sea muy fácil.

Si el formateo es absolutamente necesario, deberá considerar enviar los datos al servidor y luego hacer que el servidor procese el HTML en Excel. Si está utilizando ASP.net, en realidad es bastante fácil de hacer.

contestado el 10 de mayo de 11 a las 18:05

No puedo usar otra tabla de datos porque esta tabla la genera un software de informes de inteligencia empresarial que estoy usando. por lo que tiene que ser la tabla html estándar - code511788465541441

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.