将html5表导出为ex​​cel jquery

时间:2013-02-15 11:57:20

标签: javascript jquery html5 excel

我想使用js或jquery导出我的html表到excel表我已搜索谷歌但没有获得任何有用的资源。这是我的html表格代码

<table>
        <thead id='headers'>
            <tr>
                <th>Select</th>
                <th>Name</th>
                <th>Mobile</th>
                <th>Mail ID</th>
                <th>Rating</th>
                <th>Date</th>
                <th>Notify</th>
                                <th>View</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                                <td><input type="checkbox"/></td>
                <td>Praveen</td>
                <td>97910123123</td>
                <td>praveen@360i</td>
                <td>5 star</td>
                <td>15.2.2013</td>
                <td>A</td>
                                <td>4</td>
            </tr>
                        <tr>
                                <td><input type="checkbox"/></td>
                <td>kumar</td>
                <td>97912342333</td>
                <td>kumar@360i</td>
                <td>4 star</td>
                <td>16.2.2013</td>
                <td>D</td>
                                <td>3</td>
            </tr>
        </tbody>
    </table>

请帮我找出任何解决方案.........

2 个答案:

答案 0 :(得分:1)

我找到了the following,它适用于Chrome(63),Firefox(57)和IE11。简而言之,您可以通过切片和连接表行来创建csv。接下来,您创建一个类型为“text / csv”的Blob,最后使用锚点“a”标记的download属性下载它,以便页面不会导航到该文件。

var xport = {
  _fallbacktoCSV: true,  
  toXLS: function(tableId, filename) {   
    this._filename = (typeof filename == 'undefined') ? tableId : filename;

    //var ieVersion = this._getMsieVersion();
    //Fallback to CSV for IE & Edge
    if ((this._getMsieVersion() || this._isFirefox()) && this._fallbacktoCSV) {
      return this.toCSV(tableId);
    } else if (this._getMsieVersion() || this._isFirefox()) {
      alert("Not supported browser");
    }

    //Other Browser can download xls
    var htmltable = document.getElementById(tableId);
    var html = htmltable.outerHTML;

    this._downloadAnchor("data:application/vnd.ms-excel" + encodeURIComponent(html), 'xls'); 
  },
  toCSV: function(tableId, filename) {
    this._filename = (typeof filename === 'undefined') ? tableId : filename;
    // Generate our CSV string from out HTML Table
    var csv = this._tableToCSV(document.getElementById(tableId));
    // Create a CSV Blob
    var blob = new Blob([csv], { type: "text/csv" });

    // Determine which approach to take for the download
    if (navigator.msSaveOrOpenBlob) {
      // Works for Internet Explorer and Microsoft Edge
      navigator.msSaveOrOpenBlob(blob, this._filename + ".csv");
    } else {      
      this._downloadAnchor(URL.createObjectURL(blob), 'csv');      
    }
  },
  _getMsieVersion: function() {
    var ua = window.navigator.userAgent;

    var msie = ua.indexOf("MSIE ");
    if (msie > 0) {
      // IE 10 or older => return version number
      return parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)), 10);
    }

    var trident = ua.indexOf("Trident/");
    if (trident > 0) {
      // IE 11 => return version number
      var rv = ua.indexOf("rv:");
      return parseInt(ua.substring(rv + 3, ua.indexOf(".", rv)), 10);
    }

    var edge = ua.indexOf("Edge/");
    if (edge > 0) {
      // Edge (IE 12+) => return version number
      return parseInt(ua.substring(edge + 5, ua.indexOf(".", edge)), 10);
    }

    // other browser
    return false;
  },
  _isFirefox: function(){
    if (navigator.userAgent.indexOf("Firefox") > 0) {
      return 1;
    }

    return 0;
  },
  _downloadAnchor: function(content, ext) {
      var anchor = document.createElement("a");
      anchor.style = "display:none !important";
      anchor.id = "downloadanchor";
      document.body.appendChild(anchor);

      // If the [download] attribute is supported, try to use it

      if ("download" in anchor) {
        anchor.download = this._filename + "." + ext;
      }
      anchor.href = content;
      anchor.click();
      anchor.remove();
  },
  _tableToCSV: function(table) {
    // We'll be co-opting `slice` to create arrays
    var slice = Array.prototype.slice;

    return slice
      .call(table.rows)
      .map(function(row) {
        return slice
          .call(row.cells)
          .map(function(cell) {
            return '"t"'.replace("t", cell.textContent);
          })
          .join(",");
      })
      .join("\r\n");
  }
};

答案 1 :(得分:0)

这是解决方案(link

$("#btnExport").click(function(e) {
    window.open('data:application/vnd.ms-excel,' + $('#dvData').html());
    e.preventDefault();
});