web-dev-qa-db-fra.com

Générer une feuille Excel à partir de tables HTML à l'aide de jQuery

Je voulais générer une feuille Excel dès qu'un utilisateur clique sur un bouton. En gros, je veux faire exactement ce qui est discuté ici 

comment transmettre les valeurs de table html aux cellules de feuille Excel (réponse de Kalle H. Väravas) 

JavaScript pour exporter des tableaux HTML vers Excel

Mais de toute façon, rien ne se passe lorsque je clique sur le bouton. J'utilise le navigateur Mozilla. Mon code nécessite ActiveXObject activé. DOi-je faire quelque chose de plus pour le faire? ? 

J'ai créé ce violon pour les tests. Si cela fonctionne, je vais essayer mon vrai code. si cela fonctionne pour vous alors s'il vous plaît faites le moi savoir. Merci 

jFiddle

Code: 

JS: 

<script type="text/javascript">
    function CreateExcelSheet() {
        var i, j, str,
                myTable = document.getElementById('mytable'),
                rowCount = myTable.rows.length,
                Excel = new ActiveXObject('Excel.Application');// Activates Excel
        Excel.Workbooks.Add(); // Opens a new Workbook
        Excel.Application.Visible = true; // Shows Excel on the screen
        for (i = 0; i < rowCount; i++) {
            for (j = 0; j < myTable.rows[i].cells.length; j++) {
                str = myTable.rows[i].cells[j].innerText;
                Excel.ActiveSheet.Cells(i + 1, j + 1).Value = str; // Writes to the sheet
            }
        }
        return;
    }
</script>

Html: 

<table id ="myTable" >
            <tr>
                <td>1</td>
                <td>Jan</td>
                <td>01/04/2012</td>
                <td>Approved</td>
            </tr>
            <tr>
                <td>2</td>
                <td>Feb</td>
                <td>01/04/2012</td>
                <td>Approved</td>
            </tr>
        </table>
        <form>
            <input type="button" onclick="CreateExcelSheet();" value="Create Excel Sheet" >
        </form>
5
rockstar

Voici la réponse: Exporter une table HTML dynamique vers Excel en javascript dans un navigateur Firefox par insin

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"><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))
      }
    })()
16
Sharun

Pour répondre à la question sur IE (je n'ai pas pu répondre dans la zone de commentaire en raison de restrictions de réputation), le code ci-dessus publié par Sharun ne fonctionnera pas sur IE 10+ (' nié 'erreur). Voici un extrait qui fonctionnera dans IE 10+ avec les anciennes versions de IE, Chrome et FF:

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"><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 cellspacing="0" rules="rows" border="1" style="color:Black;background-color:White;border-color:#CCCCCC;border-width:1px;border-style:None;width:100%;border-collapse:collapse;font-size:9pt;text-align:center;">{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 }
        if (navigator.msSaveBlob) {
            var blob = new Blob([format(template, ctx)], { type: 'application/vnd.ms-Excel', endings: 'native' });
            navigator.msSaveBlob(blob, 'export.xls')
        } else {
            window.location.href = uri + base64(format(template, ctx))
        }
    }
})()
12
Ph0b0x
      $("#btnExport").click(function(e) {
              e.preventDefault();

            //getting data from table
            var data_type = 'data:application/vnd.ms-Excel';
            var table_div = document.getElementById('table_wrapper');//table_wrapper is table id
            var table_html = table_div.outerHTML.replace(/ /g, '%20');

            var a = document.createElement('a');
            a.href = data_type + ', ' + table_html;
            a.download = 'table_name_' + Math.floor((Math.random() * 9999999) + 1000000) + '.xls';
            a.click();
          });   
1
Gupta Nambula

Vous pouvez utiliser cette bonne bibliothèque: https://github.com/jmaister/excellentexport

0
artamonovdev