Сохранить несколько HTML-таблиц на странице как CSV - PullRequest
0 голосов
/ 20 января 2019

У меня есть страница, на которой у меня есть несколько HTML-таблиц.Я хочу загрузить все таблицы в один файл CSV или Excel, используя JS или JQuery. Я искал его и нашел несколько плагинов jQuery, которые делают это

https://www.jqueryscript.net/table/Table-To-CSV-jQuery-csvExport.html 

, но проблема в том, что они работают только дляодна таблица на странице. Я хочу сохранить все таблицы на странице в одном листе Excel.Кому-нибудь повезло с экспортом нескольких HTML-таблиц на странице в один файл Excel, который также работает в IE.

Спасибо

1 Ответ

0 голосов
/ 20 января 2019

Похоже, нам нужно использовать BLOB для Edge / IE (на основе этого связанного ответа ).Дайте этому шанс.Я проверил это в Edge, и это, кажется, работает.

ПРИМЕЧАНИЕ : вы не сможете нажать кнопку «Экспорт» в приведенном ниже фрагменте кода, поскольку код находится в изолированной среде.Я создал скрипку, чтобы вы могли проверить ее здесь: https://jsfiddle.net/ratk2pmz/

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
    }

    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([base64(format(template, ctx))], {
          type: "application/csv;charset=utf-8;"
        });

        var fileName = "excel.xls";
        navigator.msSaveBlob(dataContent, fileName);
      }
      return;
    }

    window.open('data:application/vnd.ms-excel,' + encodeURIComponent(format(template, ctx)));

  }
})()
<table id="table">
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
  <tr>
    <td>Ernst Handel</td>
    <td>Roland Mendel</td>
    <td>Austria</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>Helen Bennett</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Laughing Bacchus Winecellars</td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari Riuniti</td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>

<button onclick="tableToExcel('table', 'SHEET1')" class="btn btn-primary">Export to Excel</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...