javascript - 下载/保存 CSV 文件 - PapaParse
问题描述
问题:
下载的 CSV 文件为空白(unparse()
将数组/JSON 转换为 CSV 的方法)。
详细信息:
将 CSV 文件解析为 JavaScript 数组时,Papaparse 工作正常。但是当我将该数组数据或 JSON 数据提供给unparse()
方法时,它不起作用。
角度 JS 方法:
$scope.downloadCSV = function(){
var csv = Papa.unparse($scope.final_array);
console.log($scope.final_array);
console.log(csv);
var csvData = new Blob([csv], {type: 'text/csv;charset=utf-8;'});
var csvURL = null;
if (navigator.msSaveBlob) {
csvURL = navigator.msSaveBlob(csvData, 'download.csv');
} else {
csvURL = window.URL.createObjectURL(csvData);
}
var tempLink = document.createElement('a');
tempLink.href = csvURL;
tempLink.setAttribute('download', 'download.csv');
tempLink.click();
}
$scope.final_array
包含以下数据:
在上面的代码中,console.log(csv);
控制台上显示为空白。
简而言之:var csv = Papa.unparse($scope.final_array);
不工作。
解决方案
您的错误:如果我们查看您的控制台屏幕截图,我们会发现您的数组代码中有一些来自数组和对象的混杂。在您的代码中,您有一些这样的:
var array =
[
[question1: "A", question2: "A"],
[question1: "A B", question2: "B"]
];
但这是不正确的,必须是这样的:
var array =
[
{question1: "A", question2: "A"},
{question1: "A B", question2: "B"}
];
你必须纠正它。
工作示例
看到这个Codepen demo,因为 StackOverflow 片段在沙箱中,因此不起作用。
var array =
[
{
question1: "А",
question2: "А",
question3: "mike",
question1_A: "TRUE",
question1_B: "FALSE",
question1_C: "FALSE",
question1_D: "FALSE"
},
{
question1: "A В",
question2: "В",
question3: "dan",
question1_A: "TRUE",
question1_B: "TRUE",
question1_C: "FALSE",
question1_D: "FALSE"
},
{
question1: "B C D",
question2: "А В С",
question3: "tango",
question1_A: "FALSE",
question1_B: "TRUE",
question1_C: "TRUE",
question1_D: "TRUE"
},
{
question1: "A D",
question2: "С",
question3: "charlie",
question1_A: "TRUE",
question1_B: "FALSE",
question1_C: "FALSE",
question1_D: "TRUE"
},
{
question1: "В",
question2: "А",
question3: "bob",
question1_A: "FALSE",
question1_B: "TRUE",
question1_C: "FALSE",
question1_D: "FALSE"
},
{
question1: "C D",
question2: "А",
question3: "john",
question1_A: "FALSE",
question1_B: "FALSE",
question1_C: "FALSE",
question1_D: "FALSE"
}
];
function downloadCSV()
{
var csv = Papa.unparse(array);
var csvData = new Blob([csv], {type: 'text/csv;charset=utf-8;'});
var csvURL = null;
if (navigator.msSaveBlob)
{
csvURL = navigator.msSaveBlob(csvData, 'download.csv');
}
else
{
csvURL = window.URL.createObjectURL(csvData);
}
var tempLink = document.createElement('a');
tempLink.href = csvURL;
tempLink.setAttribute('download', 'download.csv');
tempLink.click();
}
<script src="https://www.papaparse.com/resources/js/papaparse.js"></script>
<input type="button" value="download CSV" onclick="downloadCSV()">
有关更多信息,请参阅Papaunparse
函数的文档。
推荐阅读
- firebase - Flutter - 在 Cloud Firestore 中更新地图和数组的值
- angular - 如何将图像存储在 PostGreSQL DB 中?
- javascript - How to change maxlength attributes for all classes of "field answer"
- python-3.x - 如何在没有 MissingRequiredArgument 错误的情况下操作 @client.command() 部分中的 message.content
- erlang - Core Erlang 的 `letrec` 是干什么用的?
- aspnetboilerplate - ASPNET Boilerplate,扩展审计日志
- python - 我可以同时而不是顺序地在列表上执行 python 代码吗?
- r - 如何从R中的重复数组中只保留一个值(最新的)
- javascript - 如何在 JavaScript 中实时预览输入元素?
- kotlin - Kotlin 智能转换为不可为空的类型和 ::class 语法无法按预期协同工作