Exportar os dados da tabela html para o Excel usando JavaScript / JQuery não está funcionando corretamente na navegação chrome

Tenho uma tabela HTML no modelo velocity. Eu quero exportar os dados da tabela html para excel usando script java ou jquery, comatibale com todo navegador. Eu estou usando o script abaixo

<script type="text/javascript">
function ExportToExcel(mytblId){
       var htmltable= document.getElementById('my-table-id');
       var html = htmltable.outerHTML;
       window.open('data:application/vnd.ms-excel,' + encodeURIComponent(html));
    }
</script>

este programa funciona bem em Mozilla Firefox , aparece com uma janela do excel e pede as opções de abrir ou gravar. Mas quando eu testei o mesmo script em Chrome browser ele não está funcionando como esperado, quando clicado no botão não há pop-up para excel. Os dados são descarregados num ficheiro com "tipo de ficheiro: ficheiro", nenhuma extensão como .xls Não existem erros na consola chrome.

jsFiddle exemplo:

Http://jsfiddle.net/insin/cmewv/

Isto funciona bem no mozilla, mas não no chrome.

Teste do navegador cromado:

Primeira Imagem: eu carrego no botão Exportar para o excel

First Image:I click on Export to excel button

e Resultado:

Result

Author: Sukane, 2014-03-11

8 answers

O script de exportação do Excel funciona no IE7+, no Firefox e no Chrome.

function fnExcelReport()
{
    var tab_text="<table border='2px'><tr bgcolor='#87AFC6'>";
    var textRange; var j=0;
    tab = document.getElementById('headerTable'); // id of table

    for(j = 0 ; j < tab.rows.length ; j++) 
    {     
        tab_text=tab_text+tab.rows[j].innerHTML+"</tr>";
        //tab_text=tab_text+"</tr>";
    }

    tab_text=tab_text+"</table>";
    tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, "");//remove if u want links in your table
    tab_text= tab_text.replace(/<img[^>]*>/gi,""); // remove if u want images in your table
    tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE "); 

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer
    {
        txtArea1.document.open("txt/html","replace");
        txtArea1.document.write(tab_text);
        txtArea1.document.close();
        txtArea1.focus(); 
        sa=txtArea1.document.execCommand("SaveAs",true,"Say Thanks to Sumit.xls");
    }  
    else                 //other browser not tested on IE 11
        sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text));  

    return (sa);
}

Basta criar uma iframe em branco:

<iframe id="txtArea1" style="display:none"></iframe>

Ligue para esta função em:

<button id="btnExport" onclick="fnExcelReport();"> EXPORT </button>
 106
Author: sampopes, 2015-01-06 18:26:16

Plugin datável resolve o propósito melhor e permite-nos exportar os dados da tabela HTML para Excel , PDF , Texto. facilmente configurável.

Por favor, Encontre o exemplo completo em baixo ligação de referência datável:

Https://datatables.net/extensions/buttons/examples/html5/simple.html

(imagem do sítio de referência datável) enter image description here

 20
Author: Aditya, 2016-08-04 07:35:30
Isto pode ajudar.
function exportToExcel(){
var htmls = "";
            var uri = 'data:application/vnd.ms-excel;base64,';
            var 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"><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>'; 
            var base64 = function(s) {
                return window.btoa(unescape(encodeURIComponent(s)))
            };

            var format = function(s, c) {
                return s.replace(/{(\w+)}/g, function(m, p) {
                    return c[p];
                })
            };

            htmls = "YOUR HTML AS TABLE"

            var ctx = {
                worksheet : 'Worksheet',
                table : htmls
            }


            var link = document.createElement("a");
            link.download = "export.xls";
            link.href = uri + base64(format(template, ctx));
            link.click();
}
 15
Author: todotresde, 2015-01-08 15:14:50

Http://wsnippets.com/export-html-table-data-excel-sheet-using-jquery/ tente este link que pode resolver o seu problema

enter image description here

 9
Author: Uchit Shrestha, 2015-07-28 08:59:29
Podes usar uma biblioteca como o ShieldUI para fazer isso.

Suporta a exportação para formatos XML e XLSX amplamente utilizados no Excel.

Mais detalhes aqui: http://demos.shieldui.com/web/grid-general/export-to-excel

 4
Author: Vladimir Georgiev, 2015-11-19 19:46:32

Em relação aos sampopes, resposta de 6 de Junho de 14 às 11: 59:

Introduzi um estilo css com tamanho de letra de 20px para mostrar os dados do excel maiores. No código de sampopes faltam as marcas principais <tr>, por isso eu Primeiro dou a manchete e não as outras linhas de tabelas dentro de um loop.

function fnExcelReport()
{
    var tab_text = '<table border="1px" style="font-size:20px" ">';
    var textRange; 
    var j = 0;
    var tab = document.getElementById('DataTableId'); // id of table
    var lines = tab.rows.length;

    // the first headline of the table
    if (lines > 0) {
        tab_text = tab_text + '<tr bgcolor="#DFDFDF">' + tab.rows[0].innerHTML + '</tr>';
    }

    // table data lines, loop starting from 1
    for (j = 1 ; j < lines; j++) {     
        tab_text = tab_text + "<tr>" + tab.rows[j].innerHTML + "</tr>";
    }

    tab_text = tab_text + "</table>";
    tab_text = tab_text.replace(/<A[^>]*>|<\/A>/g, "");             //remove if u want links in your table
    tab_text = tab_text.replace(/<img[^>]*>/gi,"");                 // remove if u want images in your table
    tab_text = tab_text.replace(/<input[^>]*>|<\/input>/gi, "");    // reomves input params
    // console.log(tab_text); // aktivate so see the result (press F12 in browser)

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE "); 

     // if Internet Explorer
    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
        txtArea1.document.open("txt/html","replace");
        txtArea1.document.write(tab_text);
        txtArea1.document.close();
        txtArea1.focus(); 
        sa = txtArea1.document.execCommand("SaveAs", true, "DataTableExport.xls");
    }  
    else // other browser not tested on IE 11
        sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text));  

    return (sa);
}   
 4
Author: Bettelbursche, 2016-03-16 12:54:59

TableExport

TableExport - a biblioteca simples e fácil de implementar para exportar tabelas HTML para os ficheiros xlsx, xls, csv e txt.

Para usar esta biblioteca, basta ligar para o TableExport construtor:

new TableExport(document.getElementsByTagName("table"));

// OR simply

TableExport(document.getElementsByTagName("table"));

// OR using jQuery

$("table").tableExport(); 

Propriedades adicionais podem ser passadas para personalizar a aparência das suas tabelas, botões e dados exportados. Veja aqui mais informações

 3
Author: insign, 2017-07-28 19:06:13

 function exportToExcel() {
        var tab_text = "<tr bgcolor='#87AFC6'>";
        var textRange; var j = 0, rows = '';
        tab = document.getElementById('student-detail');
        tab_text = tab_text + tab.rows[0].innerHTML + "</tr>";
        var tableData = $('#student-detail').DataTable().rows().data();
        for (var i = 0; i < tableData.length; i++) {
            rows += '<tr>'
                + '<td>' + tableData[i].value1 + '</td>'
                + '<td>' + tableData[i].value2 + '</td>'
                + '<td>' + tableData[i].value3 + '</td>'
                + '<td>' + tableData[i].value4 + '</td>'
                + '<td>' + tableData[i].value5 + '</td>'
                + '<td>' + tableData[i].value6 + '</td>'
                + '<td>' + tableData[i].value7 + '</td>'
                + '<td>' +  tableData[i].value8 + '</td>'
                + '<td>' + tableData[i].value9 + '</td>'
                + '<td>' + tableData[i].value10 + '</td>'
                + '</tr>';
        }
        tab_text += rows;
        var data_type = '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"><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 border="2px">{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];
                })
            }

        var ctx = {
            worksheet: "Sheet 1" || 'Worksheet',
            table: tab_text
        }
        document.getElementById("dlink").href = data_type + base64(format(template, ctx));
        document.getElementById("dlink").download = "StudentDetails.xls";
        document.getElementById("dlink").traget = "_blank";
        document.getElementById("dlink").click();
    }

Aqui os valores 1 a 10 são nomes de colunas que você está recebendo

 0
Author: Rock, 2018-06-19 20:48:29