今天遇到的一个问题就是,获取到猫眼电影票房总榜的数据后,怎么把他们填充进excel中?
本文参考了另一篇博客,地址如下:
https://blog.youkuaiyun.com/qq_34623560/article/details/79928248
本文对其中的一些细节进行修改。
首先获取到的票房总榜是一个json数组,格式类型如下:
[
{
"avgShowViewDesc": "24",
"avgViewBoxDesc": "44",
"boxDesc": "541288",
"movieId": 1299372,
"movieName": "你好,李焕英",
"releaseInfo": "2021-02-12"
},
{
"avgShowViewDesc": "31",
"avgViewBoxDesc": "47",
"boxDesc": "451489",
"movieId": 1217023,
"movieName": "唐人街探案3",
"releaseInfo": "2021-02-12"
},
......
]
电影id对应的json数据中的movieId字段;
电影名称对应movieName字段;
上映时间对应releaseInfo字段;
票房对应boxDesc字段;
平均票价对应avgViewBoxDesc字段;
场均人数对应avgShowViewDesc字段;
将json数组保存在excel表的函数封装为一个函数:JSONToExcelConvertor
第一个参数JSONData:json数组;
第二个参数FileName:保存的excel文件的文件名;
第三个参数title:表头,是一个字符串数组;
第四个参数order:顺序,它的值是json对象中的key,且顺序与title要一一对应;
第五个参数filter:过滤的key值,即不需要写进excel表中的字段
function JSONToExcelConvertor(JSONData, FileName, title = [], order = [], filter) {
if(!JSONData) return;
//转化json为object
var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
var excel = "<table>";
//设置表头
var row = "<tr>";
if(title.length > 0) {
//使用标题项
for (var i in title) {
row += "<th align='center'>" + title[i] + '</th>';
}
} else {
//不使用标题项
for (var i in arrData[0]) {
row += "<th align='center'>" + i + '</th>';
}
}
excel += row + "</tr>";
// 表格主体
//设置数据
for (var i = 0; i < arrData.length; i++) {
var row = "<tr>";
for (let index = 0; index < order.length; index++) {
//判断是否有过滤行
if(filter) {
if(filter.indexOf(order[index])==-1) {
var value = arrData[i][order[index]] == null ? "" : arrData[i][order[index]];
row += '<td>' + value + '</td>';
}
} else {
var value = arrData[i][order[index]] == null ? "" : arrData[i][order[index]];
row += "<td align='center'>" + value + "</td>";
}
}
excel += row + "</tr>";
}
excel += "</table>";
var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">';
excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel';
excelFile += '; charset=UTF-8">';
excelFile += "<head>";
excelFile += "<!--[if gte mso 9]>";
excelFile += "<xml>";
excelFile += "<x:ExcelWorkbook>";
excelFile += "<x:ExcelWorksheets>";
excelFile += "<x:ExcelWorksheet>";
excelFile += "<x:Name>";
excelFile += "{worksheet}";
excelFile += "</x:Name>";
excelFile += "<x:WorksheetOptions>";
excelFile += "<x:DisplayGridlines/>";
excelFile += "</x:WorksheetOptions>";
excelFile += "</x:ExcelWorksheet>";
excelFile += "</x:ExcelWorksheets>";
excelFile += "</x:ExcelWorkbook>";
excelFile += "</xml>";
excelFile += "<![endif]-->";
excelFile += "</head>";
excelFile += "<body>";
excelFile += excel;
excelFile += "</body>";
excelFile += "</html>";
var uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile);
var link = document.createElement("a");
link.href = uri;
link.style = "visibility:hidden";
link.download = FileName + ".xls";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
使用的话也很简单:
var title = ['电影id', '电影名称', '上映时间', '票房', '平均票价', '场均人数'];
var order = ['movieId', 'movieName', 'releaseInfo', 'boxDesc', 'avgViewBoxDesc', 'avgShowViewDesc'];
JSONToExcelConvertor(top50_21, "2021年猫眼电影top50", title, order);
**注意:**order中的每个元素都是json对象中的key,要与title中的元素一一对应,以免数据错乱;