【问题标题】:Export HMTL table to CSV with spanned rows and columns将 HTML 表格导出为 CSV,其中包含跨行和跨列
【发布时间】:2020-08-17 15:13:01
【问题描述】:

我有一个 HTML 表格,它横跨行和列,看起来有点复杂。我需要一种在单击按钮时将此表导出到 CSV 文件的方法。

下面是表格的代码,

<table class="table table-bordered">
<thead class="thead-dark">
  <tr>
     <th scope="col">Fruit Name</th>
     <th scope="col">Type</th>
     <th scope="col" colspan="3">Features</th>
     <th scope="col">Recommended Values</th>
  </tr>
</thead>
<tbody ng-repeat="x in response">
  <tr>
     <th  rowspan="6"><b>{{x.FruitName}}</b></th>
     <td rowspan="6"><b>{{x.FruitType}}</b></td>
     <td rowspan="3">Color</td>
     <td>Outer </td>
     <td><b>{{x.Outer}}</b></td>
     <td>Green/Black</td>
  </tr>
  <tr>
     <td>Inner</td>
     <td><b>{{x.Inner}}</b></td>
     <td>Red</td>
  </tr>
  <tr>
     <td>Seed</td>
     <td><b>{{x.Seed}}</b></td>
     <td>Seedless</td>
  </tr>
  <tr>
     <td rowspan="2">Water</td>
     <td>Sweet</td>
     <td><b>{{x.Sweet}}</b></td>
     <td>80%</td>
  </tr>
  <tr>
     <td>Sour</td>
     <td><b>{{x.Sour}}</b></td>
     <td>10%</td>
  </tr>
  <tr>
     <td rowspan="1">Weight</td>
     <td>Body Wt</td>
     <td ><b>{{x.weight}}</b></td>
     <td>500gm</td>
  </tr>
</tbody>

我试过用这个,

function exportTableToCSV(filename) {
        var csv = [];
        var rows = document.querySelectorAll("table tr");

        for (var i = 0; i < rows.length; i++) {
            var row = [], cols = rows[i].querySelectorAll("td, th");

            for (var j = 0; j < cols.length; j++) 
                row.push(cols[j].innerText);

            csv.push(row.join(","));        
        }
        downloadCSV(csv.join("\n"), filename);
    }
    function downloadCSV(csv, filename) {
        var csvFile;
        var downloadLink;
        csvFile = new Blob([csv], {type: "text/csv"});
        downloadLink = document.createElement("a");
        downloadLink.download = filename;
        downloadLink.href = window.URL.createObjectURL(csvFile);
        downloadLink.style.display = "none";
        document.body.appendChild(downloadLink);
        downloadLink.click();
    }

但是我得到的输出并不完全是我在图片中提到的。 如何按原样将 HTML 表格准确导入 CSV。 PS:甚至可以添加更多的跨行和列

【问题讨论】:

  • 我遇到了同样的问题并使用了这个stackoverflow.com/a/65087980/4704080>

标签: javascript html css angularjs bootstrap-4


【解决方案1】:

我已经试用了您的代码,没问题。我还发现了一个link,它使用相同的技术来转换表格。我假设你认为这不正常,但它应该是这样工作的。

导出的 CSV 如下所示:

Fruit Name,Type,Feature,Recommended
Watermelon,melon,Color,Outer,Green,Black/Green
Inner,Red,Red
Seed,Black,Seedless
Water,Sweet,50%,80%
Sour,20%,10%
Weight,Body Wt,400gm,500gm

如您所见,第一个单元格的第二行占用了 6 行空间。在 CSV 文件中,较大行的内容不会出现在下一行中,因为它已经存在。

不过,excel 也以这种方式导出表格,并且 row- 和 colspan 不存储在 CSV 文件中,转换后可能会丢失一些信息。

我还找了一个answer,真的很详细。

【讨论】:

  • 感谢您的回复。我需要按原样导出表格,s=以某种形式的 Xcel 文档以获得更好的可读性。你可以说我需要一张表格的快照才能从我的网站下载。你有什么想法吗?
  • 您肯定需要在导出后查看表格以检查较大单元格的位置。要获得更好、更快的解决方案,link 可能会对您有所帮助。这会将 html 表格直接转换为 excel 的 xls 格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 2013-10-16
  • 2016-07-27
  • 1970-01-01
相关资源
最近更新 更多