将数据保存到excel文件(纯前端实现)
// 导出excel文件
/**
* 依赖: import XLSX from 'xlsx'
*/
let obj = {
'学生信息表': [
['姓名', '性别', '年龄', '分数'],
['张三', '男', 18, parseInt(Math.random() * 100)],
['李四', '女', 22, parseInt(Math.random() * 100)]
],
'教师信息表': [
['姓名', '性别', '年龄', '教龄'],
['王五', '男', 18, parseInt(Math.random() * 10), new Date()],
['牛六', '女', 22, parseInt(Math.random() * 10)]
]
}
let arr = [
['姓名', '性别', '年龄', '教龄'],
['王五', '男', 18, parseInt(Math.random() * 10)],
['牛六', '女', 22, parseInt(Math.random() * 10)]
]
this.downloadXlsx(obj, 'result', '信息表')
downloadXlsx (data, fileName, sheetName) {
fileName = (fileName || 'fileName') + '.xlsx'
sheetName = sheetName || 'sheet1'
download(data2blob(data, sheetName), fileName)
this.readWorkbookFromLocalFile(sheet2blob(data, sheetName), res => {
console.log(res)
})
// 下载excel文件
function download (url, fileName) {
if (typeof url == 'object' && url instanceof Blob) {
url = URL.createObjectURL(url) // 创建blob地址
}
let element = document.createElement('a')
element.href = url
element.download = fileName // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
element.style.display = 'none'
element.click()
}
// 利用xlsx提供的方法将对象转成blob
function data2blob (data, sheetName) {
let workbook = {
SheetNames: [],
Sheets: {}
}
if (data instanceof Array) {
workbook.SheetNames = [sheetName]
workbook.Sheets[sheetName] = XLSX.utils.aoa_to_sheet(data)
} else if (data instanceof Object) {
for (const key in data) {
if (data.hasOwnProperty(key)) {
const arr = data[key]
if (arr instanceof Array) {
workbook.SheetNames.push(key)
workbook.Sheets[key] = XLSX.utils.aoa_to_sheet(arr)
} else throw new Error('数据格式不正确')
}
}
}
// 生成excel的配置项
let wopts = {
bookType: 'xlsx', // 要生成的文件类型
bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
type: 'binary'
}
let wbout = XLSX.write(workbook, wopts)
let blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" })
// 字符串转ArrayBuffer
function s2ab (s) {
let buf = new ArrayBuffer(s.length)
let view = new Uint8Array(buf)
for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF
return buf
}
return blob
}
}
将数据保存到excel文件(纯前端实现)的更多相关文章
- Sql数据保存到Excel文件中
public string ExportExcel( DataSet ds,string saveFileName) { try { if (ds == null) return "数据库为 ...
- 利用PHPExcel实现数据保存到excel文件
include(dirname(__FILE__) .'/phpexcel-1.7.7/Classes/PHPExcel.php'); include(dirname(__FILE__) .'/php ...
- c# 将datatable中的数据保存到excel文件中
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Lin ...
- 关于爬取数据保存到json文件,中文是unicode解决方式
流程: 爬取的数据处理为列表,包含字典.里面包含中文, 经过json.dumps,保存到json文件中, 发现里面的中文显示未\ue768这样子 查阅资料发现,json.dumps 有一个参数.ens ...
- 使用scrapy爬取的数据保存到CSV文件中,不使用命令
pipelines.py文件中 import codecs import csv # 保存到CSV文件中 class CsvPipeline(object): def __init__(self): ...
- python爬取数据保存到Excel中
# -*- conding:utf-8 -*- # 1.两页的内容 # 2.抓取每页title和URL # 3.根据title创建文件,发送URL请求,提取数据 import requests fro ...
- ruby将mysql查询到的数据保存到excel
require "win32ole" require 'pathname' require 'mysql2' excel = WIN32OLE.new('excel.applica ...
- 保存到Excel文件中
OLEObject ole_object , ole_workbooks ole_object = CREATE OLEObjectIF ole_object.ConnectToNewObject(& ...
- jmeter 非GUI执行测试,没有响应数据保存到jtl文件办法
估计是jmeter为了减轻客户机负担,就没又默认把这些信息保存,如果想要保存,也可以,需要做出如下配置: 修改bin目录下的user.properties文件,追加配置: jmeter.save.sa ...
随机推荐
- Django的ORM如何执行group by 语句
问题描述: 使用Django的ORM建立了如下Model: class Book(models.Model): name = models.CharField(max_length=300) page ...
- (JAVA5)DOS命令
(JAVA5)DOS命令 开启DOS控制台的几种方式 win + R 输入cmd打开控制台 在任意的文件夹下面,按住shift键 + 右键单击(在此处打开Powershell窗口) 资源管理器的地址前 ...
- 【奇妙的JavaScript】# 1
奇妙的JavaScript 本专题整理了一些JavaScript的怪异行为,大部分都是选择题,题目都是简单的表达式.可以测试你有多了解 JavaScript,拓宽你的认知边界! 该专题计划每周更新1- ...
- 几百行代码写个Mybatis,原理搞的透透的!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 Mybatis 最核心的原理也是它最便于使用的体现,为什么这说? 因为我们在使用 M ...
- 论文笔记:(2021CVPR)PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds
目录 摘要 1.引言 2.相关工作 将点云映射到常规二维或三维栅格(体素) 基于MLPs的点表示学习 基于点卷积的点表示学习 动态卷积和条件卷积 3.方法 3.1 回顾 3.2 动态内核组装 Weig ...
- netty系列之:netty架构概述
目录 简介 netty架构图 丰富的Buffer数据机构 零拷贝 统一的API 事件驱动 其他优秀的特性 总结 简介 Netty为什么这么优秀,它在JDK本身的NIO基础上又做了什么改进呢?它的架构和 ...
- 15 道超经典大厂 Java 面试题!重中之重
从超高频的后端面试题出发,指明学习方向 大家好,我是鱼皮. 还记得我的老弟小阿巴么?他目前正值大一暑假,在家自学编程(刷短视频)中. 他整个大一期间基本都在学习前端.后来,我带他写了一次后端,结果就崩 ...
- 数据结构与算法-排序(六)堆排序(Heap Sort)
摘要 堆排序需要用到一种数据结构,大顶堆.大顶堆是一种二叉树结构,本质是父节点的数大于它的左右子节点的数,左右子节点的大小顺序不限制,也就是根节点是最大的值. 这里就是不断的将大顶堆的根节点的元素和尾 ...
- Linux命令(六)之防火墙iptables的相关操作以及端口的开放
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- java JNI介绍
java JNI介绍 目录 java JNI介绍 1. Java调用C++代码 2.C++代码调用java代码 JNI是Java Native Interface的全称. oracle文档中是这样描述 ...