背景信息JavaScript代码将数据导出为CSV文件未能通过分隔数据“”
我试着写一些,将一些数据导出为CSV格式的JavaScript/HTML的逻辑,和在Excel中打开一个新文档或任何工作站上的默认csv应用程序。
问题
代码成功地创建一个新的CSV文件,并提示要保存文件,但是当它在Excel中显示,一切都在一列中,而不是被分成多个列。
代码:
function exportTableToCSV($tableName, fileName) {
var csv = GetCellValues($tableName);
console.log(csv);
console.log("filename is:" + fileName);
if (navigator.userAgent.search("Trident") >= 0) {
//this is the path that is execute in IE10 browser...
window.CsvExpFrame.document.open("text/html", "replace");
window.CsvExpFrame.document.write(csv);
window.CsvExpFrame.document.close();
window.CsvExpFrame.focus();
window.CsvExpFrame.document.execCommand('SaveAs', true, fileName + ".csv");
} else {
var uri = "data:text/csv;charset=utf-8," + escape(csv);
var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = fileName + ".csv";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
};
function GetCellValues($table) {
var $rows = $table.find('tr:has(td),tr:has(th)'),
// Temporary delimiter characters unlikely to be typed by keyboard
// This is to avoid accidentally splitting the actual contents
tmpColDelim = String.fromCharCode(11), // vertical tab character
tmpRowDelim = String.fromCharCode(0), // null character
// actual delimiter characters for CSV format
colDelim = ',',
rowDelim = '"\r\n"',
// Grab text from table into CSV formatted string
csv = '"' + $rows.map(function(i, row) {
var $row = $(row),
$cols = $row.find('td, th');
return $cols.map(function(j, col) {
var $col = $(col),
text = $col.text();
return text.replace('"', '""'); // escape double quotes
}).get().join(tmpColDelim);
}).get().join(tmpRowDelim)
.split(tmpRowDelim).join(rowDelim)
.split(tmpColDelim).join(colDelim) + '"',
// Data URI
//csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);
csvData = csv;
return csvData;
};
CSV文件在Excel
代替具有数据的7列,我有与由它逗号分隔的所有7个值的数据的一列。
控制台输出上面的代码:
HTML1300: Navigation occurred.
group_membership_list.html
"Group Name","PD Number","Dest","Department","First Name","Last Name","ttp"
"Test Group","45721","[email protected]","undefined","Daniel","Pamplemouse","smtp"
"Test Group","45721","[email protected]","undefined","Daniel","Pamplemouse","smtp"
"Test Group","46481","[email protected]","undefined","Benjamin","Grouper","smtp"
"Test Group","48381","[email protected]","undefined","Gregory","Erock","smtp"
"Test Group","48381","[email protected]","undefined","Gregory","Erock","smtp"
"Test Group","48382","[email protected]","undefined","Jonathan","David","smtp"
"Test Group","48382","[email protected]","undefined","Jonathan","David","smtp"
"Test Group","45303","[email protected]","undefined","Harold","Cause","smtp"
"Test Group","45303","[email protected]","undefined","Harold","Cause","smtp"
"Test Group","45306","[email protected]","undefined","Micah","Latin","smtp"
filename is:Group Membership List.csv
我试过到目前为止:
我试图改变这一点:
colDelim = ',',
到 colDelim ='\,',
但这并没有什么区别。 我确定这是一件很简单的事情,但我似乎无法看到我的错误。任何帮助,将不胜感激。
编辑1
我也尝试改变:
window.CsvExpFrame.document.write(csv);
这样:
window.CsvExpFrame.document.write('sep=,\r\n' + csv);
基于以下计算器问题: Javascript/ jQuery : Exporting data in CSV not working in IE
但它仍然是一个不行。
EDIT 2
作为一个测试,我把该Web应用程序创建的CSV文件的副本,并试图通过Excel中导入。我选择了逗号作为分隔符。最终的结果是它失败了 - 也就是说,所有数据都以一列结尾。
我想这意味着我在代码中创建分隔符的方式是错误的。 我更改我的代码以使用此:
colDelim = '","',
并重试。当文件通过Web应用程序打开时,它仍然失败,但是如果我将该文件再次手动导入到Excel中,则此时它可以正常工作。
编辑3
这似乎是相关报价。正如你可以从控制台输出中看到的那样,每个字段似乎都被引号括起来,并用逗号分隔。但是,当我在Excel中检查数据时,第一个字段(Test Grp)实际上缺少引号。它看起来像这样:
Group Name,"PD Number","Dest","Department","First Name","Last Name","ttp"
Test Group,"45721","[email protected]","undefined","Daniel","Pamplemouse","smtp"
EDIT 4
所以我改变了我的代码看起来像这样:
// actual delimiter characters for CSV format
colDelim = '"\,"',
rowDelim = '"\r\n"',
现在虽然IE仍然失败,其他的浏览器,如Chrome浏览器consistenly工作与这个组合。另外,虽然IE无法正常打开文件,但当我手动将网页生成的csv文件导入到Excel中时,它会正确解析。 另一个有趣的神器。 IE浏览器生成文件的名称是
Group Membership List_csv.csv
,而Chrome的创建:
Group Membership List.csv
根据日志中的错误信息判断,window.CsvExpFrame未定义或为空。浏览器中是否包含所有相关的脚本或插件? – ajm
@ajm对不起,我更新了我的帖子。这是一个固定的旧信息。 – dot
你有没有在记事本或类似的文本编辑器中打开文件,并在那里看看它? –