我有一个需要能够将一些 javascript 数据(主要是数组)导出到 Microsoft Excel 的 Web 应用程序。有人告诉我最好的方法是将我的数据保存为 CSV 文件。我知道有很多线程可以处理类似的问题,但到目前为止,我还没有找到我正在寻找的确切内容......我想绕过调用 Web 服务并通过客户端执行此操作。
按照一些建议,我尝试使用数据 URI 将数组写入磁盘。这是我在 javascript 中的代码:
function exportToCsv() {
var data = [JSONdata.mass, JSONdata.waterMass, JSONdata.bedTemp, JSONdata.evapRate];
var keys = ["Mass(kg)", "H2O Mass in Bed(kg)", "Bed Temperature(kg)", "Evaporation Rate"];
var str;
var orderedData = [];
for (var i = 0, iLen = data.length; i < iLen; i++) {
temp = data[i];
for (var j = 0, jLen = temp.length; j < jLen; j++) {
if (!orderedData[j]) {
orderedData.push([temp[j]]);
} else {
orderedData[j].push(temp[j]);
}
}
}
str = keys.join(',') + '\r\n' + orderedData.join('\r\n');
var uri = 'data:application/csv;charset=UTF-8,' + str;
window.open(uri);
}
该字符串str
看起来像 CSV 格式,但是当我保存文件时,它变成了空的。我也非常想将str
弹出提示中的内容保存到 CSV 文件中。
我查看了 Downloadify 和 FileSaver.js,但找不到好的文档。这似乎应该是一件相当容易的事情......请帮忙!
提前致谢!
编辑/更新
我最终让我的解决方案使用FileSaver.js工作。我的数据是一个标题,后跟四个大型双数组,所以 CVS 对我来说是一种足够好的格式。这是我用来正确保存 CSV 文件的代码:
function exportExcel()
{
var data = [JSONdata.mass, JSONdata.waterMass, JSONdata.bedTemp, JSONdata.evapRate];
//var data = [[1,2,3,4,5],[11,22,33,44,55],[111,222,333,444,555],[1111,2222,3333,4444,5555]];
var keys = ['"Mass(kg)"', '"H2O Mass in Bed(kg)"', '"Bed Temperature(kg)"', '"Evaporation Rate"'];
var convertToCSV = function(data, keys) {
var orderedData = [];
for (var i = 0, iLen = data.length; i < iLen; i++) {
temp = data[i];
for (var j = 0, jLen = temp.length; j < jLen; j++) {
quotes = ['"'+temp[j]+'"'];
if (!orderedData[j]) {
orderedData.push([quotes]);
} else {
orderedData[j].push(quotes);
}
}
}
return keys.join(',') + '\r\n' + orderedData.join('\r\n');
}
var str = convertToCSV(data, keys);
var blob = new Blob([str], {type: "text/plain;charset=utf-8"});
var filename = prompt("Please enter the filename");
if(filename!=null && filename!="")
saveAs(blob, [filename+'.csv']);
else
alert("please enter a filename!");
}
如果其他人遇到类似的问题,这个解决方案对我来说效果很好,让我可以跳过回到服务器端。感谢大家的帮助。