javascript - JavaScript CSV 导出 - 在每个值之后添加选项卡
问题描述
这仅在 Chrome 中发生,并且仅在更新到版本 70.0.3538.77 后才开始发生。在更新之前,这在 Chrome 中从未发生过。
我有一些 JavaScript 在单击按钮以将表导出到 .csv 文件时被激活。
文件中的每个单元格在值之后都有一个制表符(或者可能是换行符?)。有人知道这里可能会发生什么吗?
这是要导出的代码:
function downloadCSV(csv, filename) {
var csvFile;
var downloadLink;
// CSV file
csvFile = new Blob([csv], {type: "text/csv"});
// Download link
downloadLink = document.createElement("a");
// File name
downloadLink.download = filename;
// Create a link to the file
downloadLink.href = window.URL.createObjectURL(csvFile);
// Hide download link
downloadLink.style.display = "none";
// Add the link to DOM
document.body.appendChild(downloadLink);
// Click download link
downloadLink.click();
}
function exportTableToCSV(filename) {
var csv = [];
var rows = document.querySelectorAll("table tbody tr,table thead 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(","));
}
// Download CSV file
downloadCSV(csv.join("\n"), filename+(new Date().getTime())+".csv");
}
解决方案
一个简单的解决方法是修剪单元格的值:
row.push(cols[j].innerText.trim());
trim()
从值中删除所有前导或尾随行结尾、制表符、空格等。
您可能还需要考虑使用引号限定文本,以防止单元格值中出现逗号问题:
row.push('"' + cols[j].innerText.trim() + '"');
肯定有更复杂的情况(如果您的值现在包含引号怎么办?),因此您可能需要随着时间的推移在此基础上输出正确的 CSV 文件。
推荐阅读
- php - URL重写和重定向地址错误
- javascript - 如何使用 Vuetify.js 制作多页 Web 应用程序?
- row - Python读取多行并将它们写入ASCII文件中的一行
- csv - 文件 A 的输出行,其中第一列与文件 B 匹配
- reactjs - 我的商店有联合减速器。我的商店有很多状态变量。但我不想听特定变量的变化
- java - 从逗号分隔的字符串中删除并获取文本,如果它在java中具有#作为前缀?
- ios - iOS 发布构建问题
- reactjs - 如何在样式组件中使用 Typescript 自定义道具
- vb.net - 如何在 vb.net 代码中调用表单属性
- android - Android 预发布报告 - 显示崩溃但零问题