将二维 javascript 数组导出到 Excel sheet
Export 2D javascript array to Excel sheet
我知道,这里有成百上千个关于这个话题的问题,但我找了一天还是没有找到满意的答案:
我有一个二维 javascript 数组,我想将其下载为 Excel sheet.
这是一个 fiddle,其中包含我目前获得的代码:
https://jsfiddle.net/3an24jmw/7/
下载成功了,但是有几个问题,我试了几天都没有解决:
- 所有项目最终都在 Excel sheet 的第一列中,因为 Excel 将“,”解释为将元素分隔为数据的一部分。如何以 Excel 理解的方式分隔元素?
- 文件名是一些密码。如何设置文件名?
- 下载的文件有双
.xls
结尾 (.xls.xls
)。怎么才能搞定一个.xls
结局呢?
- Excel 每次文件可能损坏或不安全时都会告诉我。我该如何防止这种情况?
如能对这些问题中的任何一个提供帮助,我们将不胜感激。
exportToCsv = function() {
var CsvString = "";
Results.forEach(function(RowItem, RowIndex) {
RowItem.forEach(function(ColItem, ColIndex) {
CsvString += ColItem + ',';
});
CsvString += "\r\n";
});
window.open('data:application/vnd.ms-excel,' + encodeURIComponent(CsvString));
}
更新
我只是偶然发现,1.2.和4.可以通过将vnd.ms-excel
替换为csv
来解决。
该文件将不再是 .xls
,但是 Excel 可以毫无问题地打开 csv,并且其行为符合预期。
唯一剩下的问题是文件名!
更新 2
经过 2 个完整工作日的搜索和尝试,我终于找到了解决方案,我想在这里分享它,以帮助遇到同样问题的任何人:
只需包含一个不可见的 <a>
元素,该元素使用其 download="somedata.csv"
属性为文件定义一个有用的名称。
这是我的最终版本,功能齐全 fiddle:
csv 的分隔符 Excel 取决于列表分隔符的系统区域设置。
您可以通过添加 "sep=,"
作为第一行来提示 Excel 将哪个分隔符用于您的 csv 文件。
在您的情况下,可以使用:var CsvString = '"sep=,"\r\n';
经过 2 个完整工作日的搜索和尝试,我终于找到了解决方案,我想在这里分享它,以帮助遇到同样问题的任何人:
简单地包含一个不可见的元素,它使用它的 download="somedata.csv" 属性为文件提供一个有用的名称:
这是我的最终版本,功能齐全 fiddle:
https://jsfiddle.net/3an24jmw/25/
var Results = [
["Col1", "Col2", "Col3", "Col4"],
["Data", 50, 100, 500],
["Data", -100, 20, 100],
];
exportToCsv = function() {
var CsvString = "";
Results.forEach(function(RowItem, RowIndex) {
RowItem.forEach(function(ColItem, ColIndex) {
CsvString += ColItem + ',';
});
CsvString += "\r\n";
});
CsvString = "data:application/csv," + encodeURIComponent(CsvString);
var x = document.createElement("A");
x.setAttribute("href", CsvString );
x.setAttribute("download","somedata.csv");
document.body.appendChild(x);
x.click();
}
我知道,这里有成百上千个关于这个话题的问题,但我找了一天还是没有找到满意的答案:
我有一个二维 javascript 数组,我想将其下载为 Excel sheet.
这是一个 fiddle,其中包含我目前获得的代码:
https://jsfiddle.net/3an24jmw/7/
下载成功了,但是有几个问题,我试了几天都没有解决:
- 所有项目最终都在 Excel sheet 的第一列中,因为 Excel 将“,”解释为将元素分隔为数据的一部分。如何以 Excel 理解的方式分隔元素?
- 文件名是一些密码。如何设置文件名?
- 下载的文件有双
.xls
结尾 (.xls.xls
)。怎么才能搞定一个.xls
结局呢? - Excel 每次文件可能损坏或不安全时都会告诉我。我该如何防止这种情况?
如能对这些问题中的任何一个提供帮助,我们将不胜感激。
exportToCsv = function() {
var CsvString = "";
Results.forEach(function(RowItem, RowIndex) {
RowItem.forEach(function(ColItem, ColIndex) {
CsvString += ColItem + ',';
});
CsvString += "\r\n";
});
window.open('data:application/vnd.ms-excel,' + encodeURIComponent(CsvString));
}
更新
我只是偶然发现,1.2.和4.可以通过将vnd.ms-excel
替换为csv
来解决。
该文件将不再是 .xls
,但是 Excel 可以毫无问题地打开 csv,并且其行为符合预期。
唯一剩下的问题是文件名!
更新 2
经过 2 个完整工作日的搜索和尝试,我终于找到了解决方案,我想在这里分享它,以帮助遇到同样问题的任何人:
只需包含一个不可见的 <a>
元素,该元素使用其 download="somedata.csv"
属性为文件定义一个有用的名称。
这是我的最终版本,功能齐全 fiddle:
csv 的分隔符 Excel 取决于列表分隔符的系统区域设置。
您可以通过添加 "sep=,"
作为第一行来提示 Excel 将哪个分隔符用于您的 csv 文件。
在您的情况下,可以使用:var CsvString = '"sep=,"\r\n';
经过 2 个完整工作日的搜索和尝试,我终于找到了解决方案,我想在这里分享它,以帮助遇到同样问题的任何人:
简单地包含一个不可见的元素,它使用它的 download="somedata.csv" 属性为文件提供一个有用的名称:
这是我的最终版本,功能齐全 fiddle:
https://jsfiddle.net/3an24jmw/25/
var Results = [
["Col1", "Col2", "Col3", "Col4"],
["Data", 50, 100, 500],
["Data", -100, 20, 100],
];
exportToCsv = function() {
var CsvString = "";
Results.forEach(function(RowItem, RowIndex) {
RowItem.forEach(function(ColItem, ColIndex) {
CsvString += ColItem + ',';
});
CsvString += "\r\n";
});
CsvString = "data:application/csv," + encodeURIComponent(CsvString);
var x = document.createElement("A");
x.setAttribute("href", CsvString );
x.setAttribute("download","somedata.csv");
document.body.appendChild(x);
x.click();
}