将HTML表导出为ex​​cel在IE中无效

时间:2014-03-28 09:40:31

标签: javascript jquery internet-explorer-10

将HTML表格导出到Excel在Chrome和Firefox中运行良好,但在Internet Explorer 10中无效。

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

4 个答案:

答案 0 :(得分:15)

Excel导出脚本适用于IE7 + Mozilla&amp;铬  ================================================== =========

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

只需创建一个空白的iframe

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

上调用此功能
<button id="btnExport" onclick="fnExcelReport();"> EXPORT </button>

JSFiddle(注意仅在IE 10中测试过): http://jsfiddle.net/x0av0ax5/1/

答案 1 :(得分:2)

请看这个使用BLOB的插件。 https://github.com/rainabba/jquery-table2excel

if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer
{
  if (typeof Blob !== "undefined") {
    //use blobs if we can
    tab_text = [tab_text];
    //convert to array
    var blob1 = new Blob(tab_text, {
      type: "text/html"
    });
    window.navigator.msSaveBlob(blob1, "download.xls");
  } else {
    txtArea1.document.open("txt/html", "replace");
    txtArea1.document.write(tab_text);
    txtArea1.document.close();
    txtArea1.focus();
    sa = txtArea1.document.execCommand("SaveAs", true, "download.xls");
    return (sa);
  }
} 

else
  window.location.href = 'data:application/vnd.ms-excel,' + encodeURIComponent(tab_text);

答案 2 :(得分:0)

数据uri不支持IE,也许您将excel xml数据发布到服务器以生成文件。

您可以使用Downloadify(Flash)生成文件。

https://github.com/dcneiner/Downloadify

答案 3 :(得分:0)

找到了SheetJS的社区版本,其运作方式就像一个小朋友!

没有警告,例如“ 'file.xls'的文件格式和扩展名不匹配。此文件可能已损坏或不安全。

导入库

    <script src="../Scripts/xlsx.full.min.js"></script>

粘贴调用库的函数

function doit(type, fn, dl) {
        var elt = document.getElementById('data-table');
        var wb = XLSX.utils.table_to_book(elt, { sheet: "Sheet JS" });
        return dl ?
            XLSX.write(wb, { bookType: type, bookSST: true, type: 'base64' }) :
            XLSX.writeFile(wb, fn || ('test.' + (type || 'xlsx')));
    }

使用按钮或适合您需要的任何东西触发功能。

<button id="btnExport" onclick="doit('xlsx');"> EXPORT </button>

可以在此page

中找到示例代码