How to convert html table to excel with multiple sheet?

后端 未结 8 1728
清歌不尽
清歌不尽 2020-11-28 05:53

How can I convert multiple html tables to an excel sheet with multiple worksheets? Could you please help into this.

My example https://jsfiddle.net/kdkd/5p22gdag/

相关标签:
8条回答
  • 2020-11-28 06:20

    Did not find anything on the internet to fix this, so I created my own. This is a working example that creates 2 or more sheets (1 sheet per table) and WORKS PROPERLY. Enjoy! :)

    Run the example in https://jsfiddle.net/xvkt0yw9/

    This is a ~reverse-engineering of .mht representation of XLS export (Web page). The sheet name is defined in the data-SheetName attribute of each table. The function can be easily transposed to other programming languages. (It is basically full of replace mes)

    Also provided inline-style for cell number formating (As text, General, 2 decimal)

    Note: the cell grid does show regardless of whether you set the option or not... Warning Do not indent the javascript function. (i don't know what happens to the XLS if you do, did not test, did not have to) Html: (Put the following content inside a test.html file and run it in your browser. Click on the button and open the exported Worksheet.xls)

    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
    <script type="text/javascript">
    var tablesToExcel = (function ($) {
        var uri = 'data:application/vnd.ms-excel;base64,'
        , html_start = `<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">`
        , template_ExcelWorksheet = `<x:ExcelWorksheet><x:Name>{SheetName}</x:Name><x:WorksheetSource HRef="sheet{SheetIndex}.htm"/></x:ExcelWorksheet>`
        , template_ListWorksheet = `<o:File HRef="sheet{SheetIndex}.htm"/>`
        , template_HTMLWorksheet = `
    ------=_NextPart_dummy
    Content-Location: sheet{SheetIndex}.htm
    Content-Type: text/html; charset=windows-1252
    
    ` + html_start + `
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
        <link id="Main-File" rel="Main-File" href="../WorkBook.htm">
        <link rel="File-List" href="filelist.xml">
    </head>
    <body><table>{SheetContent}</table></body>
    </html>`
        , template_WorkBook = `MIME-Version: 1.0
    X-Document-Type: Workbook
    Content-Type: multipart/related; boundary="----=_NextPart_dummy"
    
    ------=_NextPart_dummy
    Content-Location: WorkBook.htm
    Content-Type: text/html; charset=windows-1252
    
    ` + html_start + `
    <head>
    <meta name="Excel Workbook Frameset">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <link rel="File-List" href="filelist.xml">
    <!--[if gte mso 9]><xml>
     <x:ExcelWorkbook>
        <x:ExcelWorksheets>{ExcelWorksheets}</x:ExcelWorksheets>
        <x:ActiveSheet>0</x:ActiveSheet>
     </x:ExcelWorkbook>
    </xml><![endif]-->
    </head>
    <frameset>
        <frame src="sheet0.htm" name="frSheet">
        <noframes><body><p>This page uses frames, but your browser does not support them.</p></body></noframes>
    </frameset>
    </html>
    {HTMLWorksheets}
    Content-Location: filelist.xml
    Content-Type: text/xml; charset="utf-8"
    
    <xml xmlns:o="urn:schemas-microsoft-com:office:office">
        <o:MainFile HRef="../WorkBook.htm"/>
        {ListWorksheets}
        <o:File HRef="filelist.xml"/>
    </xml>
    ------=_NextPart_dummy--
    `
        , 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 (tables, filename) {
            var context_WorkBook = {
                ExcelWorksheets:''
            ,   HTMLWorksheets: ''
            ,   ListWorksheets: ''
            };
            var tables = jQuery(tables);
            $.each(tables,function(SheetIndex){
                var $table = $(this);
                var SheetName = $table.attr('data-SheetName');
                if($.trim(SheetName) === ''){
                    SheetName = 'Sheet' + SheetIndex;
                }
                context_WorkBook.ExcelWorksheets += format(template_ExcelWorksheet, {
                    SheetIndex: SheetIndex
                ,   SheetName: SheetName
                });
                context_WorkBook.HTMLWorksheets += format(template_HTMLWorksheet, {
                    SheetIndex: SheetIndex
                ,   SheetContent: $table.html()
                });
                context_WorkBook.ListWorksheets += format(template_ListWorksheet, {
                    SheetIndex: SheetIndex
                });
            });
    
            var link = document.createElement("A");
            link.href = uri + base64(format(template_WorkBook, context_WorkBook));
            link.download = filename || 'Workbook.xls';
            link.target = '_blank';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    })(jQuery);
    </script>
    </head>
    <body>
        <button onclick="tablesToExcel('#table_1,#table_2', 'WorkSheet.xls');">HTML Tables to XLS sheets</button>
        <table id="table_1" data-SheetName="My custom sheet 1">
            <thead>
                <tr >
                    <td colspan="4" style="border-color:#fff;">
                        Left info
                    </td>
                    <td colspan="3" class="text-right" style="border-color:#fff;">
                        Right info
                    </td>
                </tr>
                <tr>
                    <th colspan="7" style="border-color:#fff;text-decoration:underline;font-size:2em;" class="text-center">
                        Title
                    </th>
                </tr>
                <tr>
                    <th colspan="7" style="border-left-color:#fff; border-right-color:#fff;border-top-color:#fff;text-decoration:underline;font-size:1.5em;" class="text-center">
                        Subtitle
                    </th>
                </tr>
                <tr>
                    <th colspan="7" style="border-left-color:#fff;border-right-color:#fff;border-top-color:#fff;height:50px;">
                        Spacer
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td style="mso-number-format:'\@'">1</td>
                    <td style="mso-number-format:'General'">2</td>
                    <td style="mso-number-format:'0\.00'">3</td>
                    <td>info</td>
                    <td>info</td>
                    <td>info</td>
                    <td>info</td>
                </tr>
            </tbody>
        </table>
        <table id="table_2" data-SheetName="My custom worksheet 2">
            <thead>
                <tr >
                    <td colspan="2" style="border-color:#fff;">
                        Left info 2
                    </td>
                    <td colspan="2" class="text-right" style="border-color:#fff;">
                        Right info 2
                    </td>
                </tr>
                <tr>
                    <th colspan="4" style="border-color:#fff;text-decoration:underline;font-size:2em;" class="text-center">
                        Title 2
                    </th>
                </tr>
                <tr>
                    <th colspan="4" style="border-left-color:#fff; border-right-color:#fff;border-top-color:#fff;text-decoration:underline;font-size:1.5em;" class="text-center">
                        Subtitle 2
                    </th>
                </tr>
                <tr>
                    <th colspan="4" style="border-left-color:#fff;border-right-color:#fff;border-top-color:#fff;height:50px;">
                        Spacer 2
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td style="mso-number-format:'\@'">3</td>
                    <td style="mso-number-format:'General'">4</td>
                    <td style="mso-number-format:'0\.00'">5</td>
                    <td>info2</td>
                    <td>info3</td>
                    <td>info4</td>
                    <td>info5</td>
                </tr>
            </tbody>
        </table>
    </body>
    </html>
    
    0 讨论(0)
  • 2020-11-28 06:25
    function tablesToExcel() {
            {
    
                var tab_text = document.getElementById("MsoNormalTable").outerHTML;
                var textRange; var j = 0;
                var tab = document.getElementById('MsoNormalTable'); // id of table
                var sa;
    
                var ua = window.navigator.userAgent;
                var msie = ua.indexOf("MSIE ");
                var txt = document.getElementById('txtArea1').contentWindow;
                if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer
                {
                    txt.document.open("txt/html", "replace");
                    txt.document.write(tab_text);
                    txt.document.close();
                    txt.focus();
                    sa = txt.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);
            }
     }
    
    <iframe id="txtArea1" style="display:none"></iframe>
    

    It is working with IE7+ fine... :)

    0 讨论(0)
  • 2020-11-28 06:27

    Bhutani Vijay's code works perfectly fine. For IE 11 compatibility I used the Blob object as below:

    var tablesToExcel = (function() {
      var uri = 'data:application/vnd.ms-excel;base64,',
        tmplWorkbookXML = '<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?><Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">' +
        '<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"><Author>Axel Richter</Author><Created>{created}</Created></DocumentProperties>' +
        '<Styles>' +
        '<Style ss:ID="Currency"><NumberFormat ss:Format="Currency"></NumberFormat></Style>' +
        '<Style ss:ID="Date"><NumberFormat ss:Format="Medium Date"></NumberFormat></Style>' +
        '</Styles>' +
        '{worksheets}</Workbook>',
        tmplWorksheetXML = '<Worksheet ss:Name="{nameWS}"><Table>{rows}</Table></Worksheet>',
        tmplCellXML = '<Cell{attributeStyleID}{attributeFormula}><Data ss:Type="{nameType}">{data}</Data></Cell>',
        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(tables, wsnames, wbname, appname) {
        var ctx = "";
        var workbookXML = "";
        var worksheetsXML = "";
        var rowsXML = "";
    
        for (var i = 0; i < tables.length; i++) {
          if (!tables[i].nodeType) tables[i] = document.getElementById(tables[i]);
          for (var j = 0; j < tables[i].rows.length; j++) {
            rowsXML += '<Row>'
            for (var k = 0; k < tables[i].rows[j].cells.length; k++) {
              var dataType = tables[i].rows[j].cells[k].getAttribute("data-type");
              var dataStyle = tables[i].rows[j].cells[k].getAttribute("data-style");
              var dataValue = tables[i].rows[j].cells[k].getAttribute("data-value");
              dataValue = (dataValue) ? dataValue : tables[i].rows[j].cells[k].innerHTML;
              var dataFormula = tables[i].rows[j].cells[k].getAttribute("data-formula");
              dataFormula = (dataFormula) ? dataFormula : (appname == 'Calc' && dataType == 'DateTime') ? dataValue : null;
              ctx = {
                attributeStyleID: (dataStyle == 'Currency' || dataStyle == 'Date') ? ' ss:StyleID="' + dataStyle + '"' : '',
                nameType: (dataType == 'Number' || dataType == 'DateTime' || dataType == 'Boolean' || dataType == 'Error') ? dataType : 'String',
                data: (dataFormula) ? '' : dataValue,
                attributeFormula: (dataFormula) ? ' ss:Formula="' + dataFormula + '"' : ''
              };
              rowsXML += format(tmplCellXML, ctx);
            }
            rowsXML += '</Row>'
          }
          ctx = {
            rows: rowsXML,
            nameWS: wsnames[i] || 'Sheet' + i
          };
          worksheetsXML += format(tmplWorksheetXML, ctx);
          rowsXML = "";
        }
    
        ctx = {
          created: (new Date()).getTime(),
          worksheets: worksheetsXML
        };
        workbookXML = format(tmplWorkbookXML, ctx);
    
        var link = document.createElement("A");
        
        // IE 11
        if (window.navigator.msSaveBlob) {
          var blob = new Blob([workbookXML], {
            type: "application/csv;charset=utf-8;"
          });
          navigator.msSaveBlob(blob, 'test.xls');
        }
        // Chrome and other browsers
        else {
          link.href = uri + base64(workbookXML);
        }
    
        link.download = wbname || 'Workbook.xls';
        link.target = '_blank';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      }
    })();

    0 讨论(0)
  • 2020-11-28 06:27

    I just posted this to give one more option to export in multiple sheet with css. Working Fiddle

    I strucked for more days and found this ways.Hope this may helps for other.

    $('button').click(function() {
    tablesToExcel(['tbl1','tbl2'], ['ProductDay1','ProductDay2'], 'TestBook.xls', 'Excel')
    
    });  
      
      var tablesToExcel = (function() {
        var uri = 'data:application/vnd.ms-excel;base64,'
        , tmplWorkbookXML = '<?xml version="1.0" encoding="windows-1252"?><?mso-application progid="Excel.Sheet"?>'
          + '   <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"  xmlns:html="http://www.w3.org/TR/REC-html40">'
        + '     <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">'
          + '           <Author>Qompare</Author>'
          + '           <Created>{created}</Created>'
          + '       </DocumentProperties>'
        + '     <Styles>'
          + '           <Style ss:ID="Default" ss:Name="Normal">'
          + '               <NumberFormat ss:Format=""/>'
          + '           </Style>'
          + '           <Style ss:ID="Header">'
          + '               <Alignment ss:Vertical="Bottom"/>'
        + '             <Borders>'
          + '                   <Border ss:Color="#000000" ss:Weight="2" ss:LineStyle="Continuous" ss:Position="Right"/>'
          + '                   <Border ss:Color="#000000" ss:Weight="2" ss:LineStyle="Continuous" ss:Position="Left"/>'
          + '                   <Border ss:Color="#000000" ss:Weight="2" ss:LineStyle="Continuous" ss:Position="Top"/>'
          + '                   <Border ss:Color="#000000" ss:Weight="2" ss:LineStyle="Continuous" ss:Position="Bottom"/>'
        + '             </Borders>'
          + '               <Font ss:FontName="Calibri" ss:Size="12" ss:Color="#000000"/>'
          + '               <Interior ss:Color="#cccccc" ss:Pattern="Solid" />'
          + '               <NumberFormat/>'
          + '               <Protection/>'
          + '           </Style>'
        + '         <Style ss:ID="Changed">'
          + '               <Borders/>'
          + '               <Font ss:Color="#ff0000"></Font>'
          + '               <Interior ss:Color="#99CC00" ss:Pattern="Solid"></Interior>'
          + '               <NumberFormat/>'
          + '               <Protection/>'
          + '           </Style>'
        + '         <Style ss:ID="Missed">'
          + '               <Borders/>'
          + '               <Font ss:Color="#ff0000"></Font>'
          + '               <Interior ss:Color="#ff0000" ss:Pattern="Solid"></Interior>'
          + '               <NumberFormat/>'
          + '               <Protection/>'
          + '           </Style>'
        + '         <Style ss:ID="Decimals">'
          + '               <NumberFormat ss:Format="Fixed"/>'
          + '           </Style>'    
        + ' </Styles>' 
        + ' {worksheets}'
          + '</Workbook>'
        , tmplWorksheetXML = '<Worksheet ss:Name="{nameWS}">'
          + '   <ss:Table>'
          + '       {rows}'
          + '   </ss:Table>'
          + '</Worksheet>'
        , tmplCellXML = '           <ss:Cell{attributeStyleID}{attributeFormula}>'
          + '               <ss:Data ss:Type="{nameType}">{data}</ss:Data>'
          + '           </ss:Cell>'
        , 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(tables, wsnames, wbname, appname) {
          var ctx = "";
          var workbookXML = "";
          var worksheetsXML = "";
          var rowsXML = "";
    
          for (var i = 0; i < tables.length; i++) {
            if (!tables[i].nodeType) tables[i] = document.getElementById(tables[i]);
            for (var j = 0; j < tables[i].rows.length; j++) {
              rowsXML += '      <ss:Row>'
              for (var k = 0; k < tables[i].rows[j].cells.length; k++) {
                var dataType = tables[i].rows[j].cells[k].getAttribute("data-type");
                var dataStyle = tables[i].rows[j].cells[k].getAttribute("data-style");
                var dataValue = tables[i].rows[j].cells[k].getAttribute("data-value");
                dataValue = (dataValue)?dataValue:tables[i].rows[j].cells[k].innerHTML;
                if(!isNaN(dataValue)){
                        dataType = 'Number';
                        dataValue = parseFloat(dataValue);
                }
                var dataFormula = tables[i].rows[j].cells[k].getAttribute("data-formula");
                dataFormula = (dataFormula)?dataFormula:(appname=='Calc' && dataType=='DateTime')?dataValue:null;
                ctx = {  attributeStyleID: (dataStyle=='Changed' || dataStyle=='Missed'|| dataStyle=='Header')?' ss:StyleID="'+dataStyle+'"':''
                       , nameType: (dataType=='Number' || dataType=='DateTime' || dataType=='Boolean' || dataType=='Error')?dataType:'String'
                       , data: (dataFormula)?'':dataValue
                       , attributeFormula: (dataFormula)?' ss:Formula="'+dataFormula+'"':''
                      };
                rowsXML += format(tmplCellXML, ctx);
              }
              rowsXML += '      </ss:Row>'
            }
            ctx = {rows: rowsXML, nameWS: wsnames[i] || 'Sheet' + i};
            worksheetsXML += format(tmplWorksheetXML, ctx);
            rowsXML = "";
          }
    
          ctx = {created: (new Date()).getTime(), worksheets: worksheetsXML};
          workbookXML = format(tmplWorkbookXML, ctx);
          var link = document.createElement("A");
          link.href = uri + base64(workbookXML);
          link.download = wbname || 'Workbook.xls';
          link.target = '_blank';
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        }
      })();
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
     <!--<button  onclick="tablesToExcel( [{ 'sheet': 'firstsheet','tables' : ['tbl1','tbl2']},{ 'sheet': 'secondsheet','tables' : ['tbl5']}], 'TestBook.xls', 'Excel')">Export to Excel</button> -->
     <!-- button  onclick="">Export to Excel</button> -->
      <button  >Export to Excel</button>
     
    <table id="tbl1" class="table2excel">
         <thead>
                        <tr>
                         
                            <th data-style="Header">Product</th>
                            <th data-style="Header">Price</th>
                            <th data-style="Header">Available</th>
                            <th data-style="Header">Count</th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td data-style="Changed">Bred</td>
                            <td data-style="Missed">1
    </td>
                            <td>037.57834600204239857
    </td>
                            <td data-style="Header">3
    </td>
                        </tr>
                        <tr>
                            <td>Butter</td>
                            <td>4
    </td>
                            <td>5
    </td>
                            <td >6
    </td>
                        </tr>
                        </tbody>
                    </table>
    <hr>
      
      <table id="tbl2" class="table2excel">
      <thead>
                        <tr>
                            <th>Product</th>
                            <th>Price</th>
                            <th>Available</th>
                            <th>Count</th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td>Bred</td>
                            <td>7.5
    </td>
                            <td>8
    </td>
                            <td>9
    </td>
                        </tr>
                        <tr>
                            <td>Butter</td>
                            <td>14
    </td>
                            <td>15
    </td>
                            <td >16
    </td>
                        </tr>
                        </tbody>
                    </table>
    
    <table id="joined" class="table2excel">
      <thead>
        <tr></tr>
        </thead>
          <tbody>
          </tbody>
    </table>

    0 讨论(0)
  • 2020-11-28 06:33

    Here is a better solution that supports exporting table in the latest Excel format i.e. xlsx . The accepted solution would fail in case the total number of rows being exported exceeds 3407 on Chrome.

    An example from the link above: http://jsfiddle.net/6ckj281f/

    html

    <button onclick="saveFile()">Save XLSX file</button>
    

    javascript

    window.saveFile = function saveFile () {
    var data1 = [{a:1,b:10},{a:2,b:20}];
    var data2 = [{a:100,b:10},{a:200,b:20}];
    var opts = [{sheetid:'One',header:true},{sheetid:'Two',header:false}];
    var res = alasql('SELECT INTO XLSX("restest344b.xlsx",?) FROM ?',
                     [opts,[data1,data2]]);
    }
    
    0 讨论(0)
  • 2020-11-28 06:35

    You can do as below : Here is Full Example

    Html :

    <table id="tbl1" class="table2excel">
            <tr>
                <td>Product</td>
                <td>Price</td>
                <td>Available</td>
                <td>Count</td>
            </tr>
            <tr>
                <td>Bred</td>
                <td>1</td>
                <td>2</td>
                 <td>3</td>
            </tr>
            <tr>
                <td>Butter</td>
                <td>4   </td>
                <td>5   </td>
                <td >6  </td>
            </tr>
      </table>
    <hr>
    
      <table id="tbl2" class="table2excel">
            <tr>
                <td>Product</td>
                <td>Price</td>
                <td>Available</td>
                <td>Count</td>
            </tr>
            <tr>
                <td>Bred</td>
                <td>7</td>
                <td>8</td>
                <td>9</td>
            </tr>
            <tr>
                <td>Butter</td>
                <td>14</td>
                <td>15</td>
                <td >16</td>
            </tr>
        </table>
    
    
    <button  onclick="tablesToExcel(['tbl1','tbl2'], ['ProductDay1','ProductDay2'], 'TestBook.xls', 'Excel')">Export to Excel</button>
    

    Javascript:

     var tablesToExcel = (function() {
        var uri = 'data:application/vnd.ms-excel;base64,'
        , tmplWorkbookXML = '<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?><Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">'
          + '<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"><Author>Axel Richter</Author><Created>{created}</Created></DocumentProperties>'
          + '<Styles>'
          + '<Style ss:ID="Currency"><NumberFormat ss:Format="Currency"></NumberFormat></Style>'
          + '<Style ss:ID="Date"><NumberFormat ss:Format="Medium Date"></NumberFormat></Style>'
          + '</Styles>' 
          + '{worksheets}</Workbook>'
        , tmplWorksheetXML = '<Worksheet ss:Name="{nameWS}"><Table>{rows}</Table></Worksheet>'
        , tmplCellXML = '<Cell{attributeStyleID}{attributeFormula}><Data ss:Type="{nameType}">{data}</Data></Cell>'
        , 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(tables, wsnames, wbname, appname) {
          var ctx = "";
          var workbookXML = "";
          var worksheetsXML = "";
          var rowsXML = "";
    
          for (var i = 0; i < tables.length; i++) {
            if (!tables[i].nodeType) tables[i] = document.getElementById(tables[i]);
            for (var j = 0; j < tables[i].rows.length; j++) {
              rowsXML += '<Row>'
              for (var k = 0; k < tables[i].rows[j].cells.length; k++) {
                var dataType = tables[i].rows[j].cells[k].getAttribute("data-type");
                var dataStyle = tables[i].rows[j].cells[k].getAttribute("data-style");
                var dataValue = tables[i].rows[j].cells[k].getAttribute("data-value");
                dataValue = (dataValue)?dataValue:tables[i].rows[j].cells[k].innerHTML;
                var dataFormula = tables[i].rows[j].cells[k].getAttribute("data-formula");
                dataFormula = (dataFormula)?dataFormula:(appname=='Calc' && dataType=='DateTime')?dataValue:null;
                ctx = {  attributeStyleID: (dataStyle=='Currency' || dataStyle=='Date')?' ss:StyleID="'+dataStyle+'"':''
                       , nameType: (dataType=='Number' || dataType=='DateTime' || dataType=='Boolean' || dataType=='Error')?dataType:'String'
                       , data: (dataFormula)?'':dataValue
                       , attributeFormula: (dataFormula)?' ss:Formula="'+dataFormula+'"':''
                      };
                rowsXML += format(tmplCellXML, ctx);
              }
              rowsXML += '</Row>'
            }
            ctx = {rows: rowsXML, nameWS: wsnames[i] || 'Sheet' + i};
            worksheetsXML += format(tmplWorksheetXML, ctx);
            rowsXML = "";
          }
    
          ctx = {created: (new Date()).getTime(), worksheets: worksheetsXML};
          workbookXML = format(tmplWorkbookXML, ctx);
    
    
    
          var link = document.createElement("A");
          link.href = uri + base64(workbookXML);
          link.download = wbname || 'Workbook.xls';
          link.target = '_blank';
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        }
      })();
    
    0 讨论(0)
提交回复
热议问题