How do I export html table data as .csv file?

前端 未结 8 1176
轮回少年
轮回少年 2020-11-29 19:27

I have a table of data in an html table on a website and need to know how to export that data as .csv file.

How would this be done?

相关标签:
8条回答
  • 2020-11-29 20:11

    The following solution can do it.

    $(function() {
      $("button").on('click', function() {
        var data = "";
        var tableData = [];
        var rows = $("table tr");
        rows.each(function(index, row) {
          var rowData = [];
          $(row).find("th, td").each(function(index, column) {
            rowData.push(column.innerText);
          });
          tableData.push(rowData.join(","));
        });
        data += tableData.join("\n");
        $(document.body).append('<a id="download-link" download="data.csv" href=' + URL.createObjectURL(new Blob([data], {
          type: "text/csv"
        })) + '/>');
    
    
        $('#download-link')[0].click();
        $('#download-link').remove();
      });
    });
    table {
      border-collapse: collapse;
    }
    
    td,
    th {
      border: 1px solid #aaa;
      padding: 0.5rem;
      text-align: left;
    }
    
    td {
      font-size: 0.875rem;
    }
    
    .btn-group {
      padding: 1rem 0;
    }
    
    button {
      background-color: #fff;
      border: 1px solid #000;
      margin-top: 0.5rem;
      border-radius: 3px;
      padding: 0.5rem 1rem;
      font-size: 1rem;
    }
    
    button:hover {
      cursor: pointer;
      background-color: #000;
      color: #fff;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <table>
      <thead>
        <tr>
          <th>Name</th>
          <th>Author</th>
          <th>Description</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>jQuery</td>
          <td>John Resig</td>
          <td>The Write Less, Do More, JavaScript Library.</td>
        </tr>
        <tr>
          <td>React</td>
          <td>Jordan Walke</td>
          <td>React makes it painless to create interactive UIs.</td>
        </tr>
        <tr>
          <td>Vue.js</td>
          <td>Yuxi You</td>
          <td>The Progressive JavaScript Framework.</td>
        </tr>
      </tbody>
    </table>
    
    <div class="btn-group">
      <button>csv</button>
    </div>

    0 讨论(0)
  • 2020-11-29 20:13

    Thanks to gene tsai, here is some modifications to his code to run on my target page:

    csv = []
    rows = $('#data tr');
    for(i =0;i < rows.length;i++) {
        cells = $(rows[i]).find('td,th');
        csv_row = [];
        for (j=0;j<cells.length;j++) {
            txt = cells[j].innerText;
            csv_row.push(txt.replace(",", "-"));
        }
        csv.push(csv_row.join(","));
    }
    output = csv.join("\n")
    

    improvements:

    • Use generic JavaScript for loop
    • make sure each cell does not have a comma
    0 讨论(0)
提交回复
热议问题