JavaScript——将json数组填充进excel表并下载保存

2023-11-08

今天遇到的一个问题就是,获取到猫眼电影票房总榜的数据后,怎么把他们填充进excel中?
本文参考了另一篇博客,地址如下:
https://blog.csdn.net/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中的元素一一对应,以免数据错乱;
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript——将json数组填充进excel表并下载保存 的相关文章

随机推荐

  • 数据分析与可视化-R语言分析 (选择练习)

    1 多选题 可以运行R语言的操作系统包括 选项 A Linux B Windows C Mac OS D Android 答案 Linux Windows Mac OS 2 单选题 可以命令将R语言升级到最新版本 选项 A fleshR B
  • vue 的事件修饰符(v-on, v-model)

    先谈谈我对vue 的一些指令的理解吧 v bind 顾名思义是绑定的意思 但是只能绑定属性 语法糖 而 v on 是绑定一个事件 语法糖 v model 是双向数据的绑定 只能用于表单中 而值得一说的v model 相当于是 v bind
  • linux系统数据盘挂载

    前言 挂载前 最好是新的服务器 不要安装宝塔 我之前先安装宝塔 再挂载就有点费劲 需要考虑原来文件是否受损 当前教程属于新服务器下 先挂载数据盘 挂载步骤 查看磁盘信息 gt gt 将数据盘分区 gt gt 格式化数据盘 gt gt 创建一
  • Python怎么输出换行

    python怎样输出换行 Python怎么输出换行 0 摘要 由于特殊的输出要求 我们在使用print 函数时 不希望输出结束后自动换行 1 print 指定结束符 Print hello end Print world result he
  • Linux------网络基础1

    文章目录 计算机网络的发展历程 网络协议 计算机网络分层体系结构 局域网通信的原理 IP地址和 MAC地址的区别 TCP IP体系结构 计算机网络的发展历程 简单的了解一下就行 图就不提供了 1 最开始 计算机之间是相互独立的 不能沟通交流
  • python3.6 安装pyltp

    当时安装pyltp一直报错 缺少balabala 安装了都没有什么暖用 so成功后安利一下 1 安装wheel 下面两个文件针对不同的python版本下载一个即可 pyltp 0 2 1 cp35 cp35m win amd64 whl p
  • 2021年7月,关于技术和未来

    近期研究了一段时间梅花易数 作为一个从小接受唯物主义教育的社会主义接班人 自然曾经一度对这些所谓的封建迷信是不屑一顾的 后来随着年龄增长 才开始慢慢觉得应对这些传承下来的古老文化保持敬畏 然而 直到最近真正仔细研究了后才发现 梅花易数居然有
  • k8s 之 volume sc pv pvc 详解

    数据卷概述 Kubernetes Volume 数据卷 主要解决了如下两方面问题 数据持久性 通常情况下 容器运行起来之后 写入到其文件系统的文件暂时性的 当容器崩溃后 kubelet将会重启该容器 此时原容器运行后写入的文件将丢失 因为容
  • PWM移相

    PWM移相可以从两方面考虑 1 如果能够移动时基 那么移动时基是一种最简便的方法 2 如果没办法移动时基 那么改变比较值也是一种可行的办法 C2000系列DSP的ePWM模块对PWM移相有相关的应用说明 如下图所示 来源于2803x芯片手册
  • Qt实现跨窗口信号槽通信

    多窗口通信 如果是窗口类对象之间互相包含 则可以直接开放public接口调用 不过 很多情况下主窗口和子窗口之间要做到异步消息通信 就必须依赖到跨窗口的信号槽 以下是一个简单的示例 母窗口 mainwindow h ifndef MAINW
  • L1-7 前世档案

    L1 7 前世档案 网络世界中时常会遇到这类滑稽的算命小程序 实现原理很简单 随便设计几个问题 根据玩家对每个问题的回答选择一条判断树中的路径 如下图所示 结论就是路径终点对应的那个结点 现在我们把结论从左到右顺序编号 编号从 1 开始 这
  • 单机 steam_好玩不贵,一个人可以玩很久,steam百元单机游戏推荐

    steam市场上的游戏有琳琅满目 从一块钱到几百块的游戏充斥在市场中 如何在众多游戏中挑选自己喜欢适合的游戏呢 今天就来推荐一下2款百元左右的单机游戏 包你满意 1 缺氧 目前steam售价 本体58元 本体 7DLC Klei survi
  • 线性方程组解的分析:唯一解,无穷多解以及无解

    本文将总结关于线性方程组解的知识点 线性方程组 定义1 线性方程组 我们将形如下式的方程组称为线性方程组 a11x1 a12x2 a1nxn b1a21x1 a22x2 a2nxn b2 am1x1 am2x2 amnxn bm 9 9 a
  • window10配置OpenGL ES3.0

    1 下载书籍源码 地址 GitHub danginsburg opengles3 book OpenGL ES 3 0 Programming Guide Sample Code 2 下载mali opengl es模拟器 下载地址 建议下
  • allegro如何通过dra文件生产psm文件

    1 dra文件是可以用allegro打开的封装文件 但是要想被pcb调用 需要psm文件才可以 想要通过dra生成psm文件很简单
  • @ComponentScan注解进行扫描的几种方式。

    方式一 扫描包 返回是String的数组 所以可是多个包路径 也可是一个包路径 完整写法是 单个 ComponentScan basePackages xxx 多个 ComponentScan basePackages xxx aaa 注意
  • 2020美赛F奖论文(一):摘要、绪论和模型准备

    全文 2020美赛F奖论文 一 摘要 绪论和模型准备 2020美赛F奖论文 二 传球网络模型 PNM 的建立和影响因子分析 2020美赛F奖论文 三 足球团队指标和基于机器学习的球队表现预测 2020美赛F奖论文 四 模拟退火算法驱动的结构
  • 神经网络七:神经网络设置层的数量和尺寸

    本文就现在神经网络中层的数量和尺寸 分析其中的优缺点 在此特声明 本文的内容是来自 CS231n课程笔记翻译 神经网络笔记1 下 智能单元 知乎专栏 因本人有时会查阅这些相关的知识点 一直翻文档比较麻烦 特从文档中摘录复制写到博客中 其中的
  • Mac M1系统 miniconda安装、配置conda环境,及在conda环境中安装激活QIIME2

    Mac M1系统 miniconda安装 配置conda环境 及在conda环境中安装激活QIIME2 1 适配版本的miniconda软件安装包下载 windows MAC LINUX Miniconda Conda documentat
  • JavaScript——将json数组填充进excel表并下载保存

    今天遇到的一个问题就是 获取到猫眼电影票房总榜的数据后 怎么把他们填充进excel中 本文参考了另一篇博客 地址如下 https blog csdn net qq 34623560 article details 79928248 本文对其