如何将html表格转换为excel与多个工作表? [英] How to convert html table to excel with multiple sheet?

查看:121
本文介绍了如何将html表格转换为excel与多个工作表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将多个html表格转换为包含多个工作表的Excel工作表?你能帮忙解决这个问题吗?



我的示例 https://jsfiddle.net/kdkd/5p22gdag/

 函数tablesToExcel(){
{

var tab_text =< table border ='2px'>< tr bgcolor ='#87AFC6'>;
var textRange; var j = 0;
tab = document.getElementById('tbl2'); (j = 0; j tab_text = tab_text + tab.rows [j])的表格ID


。 innerHTML +< / tr>;
// tab_text = tab_text +< / tr>;
}

tab_text = tab_text +< / table>;
var ua = window.navigator.userAgent;
var msie = ua.indexOf(MSIE);

if(msie> 0 || !! navigator.userAgent.match(/Trident.*rv\:11\./))//如果Internet Explorer
{
txtArea1.document.open(txt / html,replace);
txtArea1.document.write(tab_text);
txtArea1.document.close();
txtArea1.focus();
sa = txtArea1.document.execCommand(SaveAs,真,说谢谢Sumit.xls);
}
else //其他浏览器未在IE 11上测试
sa = window.open('data:application / vnd.ms-excel,'+ encodeURIComponent(tab_text));


return(sa);
}

}


解决方案

您可以按照以下方式进行操作: 以下是完整示例



Html

 < table id =tbl1class = table2excel > 
< tr>
< td>产品< / td>
< td>价格< / td>
< td>可用< / td>
< td>计数< / td>
< / tr>
< tr>
< td> Bred< / td>
< td> 1< / td>
< td> 2< / td>
< td> 3< / td>
< / tr>
< tr>
< td>黄油< / td>
< td> 4< / td>
< td> 5< / td>
< td> 6< / td>
< / tr>
< / table>
< hr>

< table id =tbl2class =table2excel>
< tr>
< td>产品< / td>
< td>价格< / td>
< td>可用< / td>
< td>计数< / td>
< / tr>
< tr>
< td> Bred< / td>
< td> 7< / td>
< td> 8< / td>
< td> 9< / td>
< / tr>
< tr>
< td>黄油< / td>
< td> 14< / td>
< td> 15< / td>
< td> 16< / td>
< / tr>
< / table>


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:spreadsheetxmlns: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 = < / NumberFormat>< / Style>'
+'< Style ss:ID =Date>< NumberFormat ss:Format =Medium Date>< / NumberFormat> < / style>'
+'< / Styles>'
+'{worksheets}< / Workbook>'
,tmplWorkshee tXML ='< Worksheet ss:Name ={nameWS}>< Table> {rows}< / Table>< / Worksheet>'
,tmplCellXML ='< Cell {attributeStyleID} {属性类型}>< 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] ; })}
返回函数(表,wsnames,wbname,appname){
var ctx =;
var workbookXML =;
var worksheetsXML =;
var rowsXML =;如果(!tables [i] .nodeType)tables [i] = document.getElementById(tables [i]),

(var i = 0; i< tables.length; i ++)一世]); (var k = 0; j< tables [i] .rows.length; j ++){
rowsXML + ='< Row>'
for(var k = 0; 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'&& amp; 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 + =格式(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);
}
})();


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/

        function tablesToExcel() {
        {

            var tab_text = "<table border='2px'><tr bgcolor='#87AFC6'>";
            var textRange; var j = 0;
            tab = document.getElementById('tbl2'); // 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>";
            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);
        }

 }

解决方案

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);
    }
  })();

这篇关于如何将html表格转换为excel与多个工作表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆