【问题标题】:JS HTML Table to Excel File Download IEJS HTML表格转Excel文件下载IE
【发布时间】:2015-04-13 06:28:37
【问题描述】:

我有一个 HTML 表格,我正在将其内容导出到 Excel,这就是我正在做的事情

function CreateExcelSheet() {
            var x = document.getElementById("testTable").rows;
var xls = new ActiveXObject("Excel.Application");
            xls.visible = true;
            xls.Workbooks.Add
            for (i = 0; i < x.length; i++) {
                var y = x[i].cells;
                for (j = 0; j < y.length; j++) {
                    xls.Cells(i + 1, j + 1).Value = y[j].innerText;
                }
            }
            xls.Visible = true;
            xls.UserControl = true;
            return xls;
}

它生成Excel正确,但生成它打开它后,我必须在生成后下载它。在这种情况下,我不知道如何调用 window.location.href。 我只需要在 IE 中执行此操作。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    试试这个:-

    HTML:-

    <a  onclick="tableToExcel('table_id', 'SHEET1')" class="btn btn-primary">Export to Excel </a>
    

    JS:-

     <script type="text/javascript">//<![CDATA[ 
    
            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))
                }
            })()
    //]]>  
        </script>
    

    【讨论】:

    • 我试过了,这段代码在 FF 和 Chrome 中有效,但在 IE 中无效
    【解决方案2】:

    这个怎么样。它可以在我这边与 IE 一起工作。但问题是它运行缓慢,几乎需要半分钟才能完成 Excel。但它仍然有效..

    var curTbl = document.getElementById(tableid);
    var oXL = new ActiveXObject("Excel.Application");
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    var sel = document.body.createTextRange();
    sel.moveToElementText(curTbl);
    sel.select();
    sel.execCommand("Copy");
    oSheet.Paste();
    oXL.Visible = true;
    

    【讨论】:

      【解决方案3】:
      var HeaderName = 'Download-ExcelFile';
                      var ua = window.navigator.userAgent;
                      var msieEdge = ua.indexOf("Edge");
                      var msie = ua.indexOf("MSIE ");
      
                      if (msieEdge > 0 || msie > 0) {
                          if (window.navigator.msSaveBlob) {
                              var dataContent = new Blob([data.d], {
                                  type: "application/csv;charset=utf-8;"
                              });
      
                              var fileName = HeaderName + '_' + parseInt(Math.random() * 10000000000) + '.xls';
                              navigator.msSaveBlob(dataContent, fileName);
                          }
                          return;
                      }
      
                      window.open('data:application/vnd.ms-excel,' + encodeURIComponent(data.d));
      

      “data.d”中的 Ajax 回调响应 最好的方法是通过 API 响应返回来回调你的表数据。

      【讨论】:

      • 描述你的程序代码块,这样会更有帮助。
      猜你喜欢
      • 2020-02-06
      • 2019-05-12
      • 1970-01-01
      • 2017-07-14
      • 2017-10-23
      • 2014-04-08
      • 2014-09-27
      • 1970-01-01
      • 2013-09-11
      相关资源
      最近更新 更多