John Siniger
John Siniger

Reputation: 885

Export html table to excel with Spanish characters

I am using a script with the help of JQUERY to export html table into excel. The problem is that the html page contains some Spanish characters with accents which are not getting encoded correctly inside the Excel file. But on the html file they are fine.

Here is my html page script:

<!DOCTYPE html>
    <html lang="es">
      <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>

<form action="exporttoexcel.php" method="post" 
onsubmit='$("#datatodisplay").val( $("<div>").append( $("#ReportTable").eq(0).clone() ).html() )'>
  <table id="ReportTable" width="600" cellpadding="2" cellspacing="2" class="myClass">
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Country</th>
    </tr>
    <tr>
      <td><center>
          investigación
        </center></td>
      <td><center>
          investigación
        </center></td>
      <td><center>
          investigación
        </center></td>
    </tr>   
  </table>
  <table width="600px" cellpadding="2" cellspacing="2" border="0">
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td align="center"><input type="hidden" id="datatodisplay" name="datatodisplay">
        <input type="submit" value="Export to Excel">
      </td>
    </tr>
  </table>
  </form>

and the php form processing code is the following:

<?php
header("Pragma: no-cache");
header('Content-Encoding: UTF-8');
header('Content-Type: application/force-download; charset=utf-8');
header('Content-disposition: attachment; filename=export.xls');
// Fix for IE bug in download.
header("Pragma: ");
header("Cache-Control: ");
echo $_REQUEST['datatodisplay'];
?>

Any help resolving this situation is welcome. Thanks!

Upvotes: 1

Views: 2059

Answers (2)

Rashmi Ranjan Das
Rashmi Ranjan Das

Reputation: 36

header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
header("Content-type:   application/x-msexcel; charset=utf-8");
header("Pragma: no-cache");
header('Content-Encoding: UTF-8');
header ("Content-Disposition: attachment; filename=\"$file_name" );
header ("Content-Description: Generated Report" );

if (mb_detect_encoding($content) == 'UTF-8') {
   $content = mb_convert_encoding($content , "HTML-ENTITIES", "UTF-8");
}

echo $content;

Upvotes: 0

Bastian Salazar
Bastian Salazar

Reputation: 61

this post is somewhat old, but I have the answer to your question that I hope will serve others who have a similar problem.

<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">

You can notice that in my case I used a Java function, and I mentioned it inside the

My Java Script function is as follows

var tableToExcel = (function () {
        var uri = 'data:application/vnd.ms-excel;base64,'
            , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
            , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
            , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
        return function (table, name) {
            if (!table.nodeType) table = document.getElementById(table)
            var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }
            window.location.href = uri + base64(format(template, ctx))
        }
    })()

This method is invoked in the HTML code as follows:

<!-- /.panel-body -->
            <div class="panel-body" id="tablaFechaSalida">
                <input hidden="hidden" id="exporTabla2" type="button" class="btn btn-success" onclick="tableToExcel('tablaFechaSalida', 'Reporte Decretos')" value="Exportar a Excel">                   
                <table id="tabla2" class="table table-bordered">
                    <thead id="Cabecera2">
                        <tr>
                            <th colspan="8" align="center">DECRETO ALCALDICIO</th>
                        </tr>
                        <tr>
                            <th><div style="width: 100px">N° Decreto</div></th>
                            <th><div style="width: 80px">Año</div></th>
                            <th><div style="width: 140px">Ingreso</div></th>
                            <th><div style="width: 140px">Salida</div></th>
                            <th><div style="width: 500px">Proveedor</div></th>
                            <th><div style="width: 140px">Unidad</div></th>
                            <th><div style="width: 1000px">Observacion</div></th>
                            <th><div style="width: 80px">Tipo</div></th>
                        </tr>
                    </thead>
                    <tbody id="Cuerpo2"></tbody>
                </table>
                <!-- /.table-responsive -->
            </div>
            <!-- /.panel-body -->

Upvotes: 2

Related Questions