Javascript 将HMTL表导出为带有跨行和跨列的CSV
我有一个HTML表格,它跨越了行和列,看起来有点复杂。我需要一种方法来导出这个表到CSV文件的按钮点击 下表代码如下:Javascript 将HMTL表导出为带有跨行和跨列的CSV,javascript,html,css,angularjs,bootstrap-4,Javascript,Html,Css,Angularjs,Bootstrap 4,我有一个HTML表格,它跨越了行和列,看起来有点复杂。我需要一种方法来导出这个表到CSV文件的按钮点击 下表代码如下: <table class="table table-bordered"> <thead class="thead-dark"> <tr> <th scope="col">Fruit Name</th> <th scope="col">Type</th> <
<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>
果名
类型
特征
推荐值
{{x.groutname}
{{x.果型}}
颜色
外面的
{{x.Outer}}
绿色/黑色
内部的
{{x.Inner}}
红色
种子
{x.Seed}
无籽
水
甜蜜的
{{x.Sweet}
80%
酸的
{{x.Sour}}
10%
重量
体重
{{x.weight}}
500克
我试过用这个
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();
}
函数exportTableToCSV(文件名){
var csv=[];
var rows=document.queryselectoral(“表tr”);
对于(变量i=0;i
但是我得到的输出与我在图中提到的不完全一样。
如何准确地将HTML表按原样导入CSV。
附:甚至可以添加更多跨行和跨列我已经试用了您的代码,它很好。我还发现了一种使用相同技术转换表的方法。我假设你认为这是不正常的,但它应该是这样工作的 导出的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也以这种方式导出表,并且行和列跨度不存储在CSV文件中,转换后可能会丢失一些信息
我还找到了一个,非常详细。我已经试用了你的代码,它很好。我还发现了一种使用相同技术转换表的方法。我假设你认为这是不正常的,但它应该是这样工作的 导出的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也以这种方式导出表,并且行和列跨度不存储在CSV文件中,转换后可能会丢失一些信息
我还找到了一个,非常详细。谢谢您的回复。我需要以某种形式的Xcel文档将表原样导出,以提高可读性。你可以说我需要一个表的快照从我的网站下载。你有什么想法吗?导出后,你肯定需要查看表格,以检查较大单元格的位置。对于更好、更快的解决方案,这可能会对您有所帮助。这将html表格直接转换为excel的xls格式。感谢您的回复。我需要以某种形式的Xcel文档将表原样导出,以提高可读性。你可以说我需要一个表的快照从我的网站下载。你有什么想法吗?导出后,你肯定需要查看表格,以检查较大单元格的位置。对于更好、更快的解决方案,这可能会对您有所帮助。这将html表格直接转换为excel的xls格式。