// 导出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文件(纯前端实现)的更多相关文章

  1. Sql数据保存到Excel文件中

    public string ExportExcel( DataSet ds,string saveFileName) { try { if (ds == null) return "数据库为 ...

  2. 利用PHPExcel实现数据保存到excel文件

    include(dirname(__FILE__) .'/phpexcel-1.7.7/Classes/PHPExcel.php'); include(dirname(__FILE__) .'/php ...

  3. c# 将datatable中的数据保存到excel文件中

    using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Lin ...

  4. 关于爬取数据保存到json文件,中文是unicode解决方式

    流程: 爬取的数据处理为列表,包含字典.里面包含中文, 经过json.dumps,保存到json文件中, 发现里面的中文显示未\ue768这样子 查阅资料发现,json.dumps 有一个参数.ens ...

  5. 使用scrapy爬取的数据保存到CSV文件中,不使用命令

    pipelines.py文件中 import codecs import csv # 保存到CSV文件中 class CsvPipeline(object): def __init__(self): ...

  6. python爬取数据保存到Excel中

    # -*- conding:utf-8 -*- # 1.两页的内容 # 2.抓取每页title和URL # 3.根据title创建文件,发送URL请求,提取数据 import requests fro ...

  7. ruby将mysql查询到的数据保存到excel

    require "win32ole" require 'pathname' require 'mysql2' excel = WIN32OLE.new('excel.applica ...

  8. 保存到Excel文件中

    OLEObject ole_object , ole_workbooks ole_object = CREATE OLEObjectIF ole_object.ConnectToNewObject(& ...

  9. jmeter 非GUI执行测试,没有响应数据保存到jtl文件办法

    估计是jmeter为了减轻客户机负担,就没又默认把这些信息保存,如果想要保存,也可以,需要做出如下配置: 修改bin目录下的user.properties文件,追加配置: jmeter.save.sa ...

随机推荐

  1. 解决IDEA右侧maven不显示方法

    解决IDEA右侧maven不显示方法 Ctrl+shift+A --> maven--> add maven projects -->选择对应的pom.xml

  2. 解决:CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.

    log4j给出的异常信息有下面几句: Caused by: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC C ...

  3. JMX远程连接JVM

    -Dcom.sun.management.jmxremote :允许使用JMX远程管理 -Dcom.sun.management.jmxremote.port=9999 :JMX远程连接端口 -Dco ...

  4. Optional解决空指针

    Java 8 Optional 类 Java 8 新特性 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. O ...

  5. SQL Server 行转列 列转行操作

    1.多行转成一行(并以','分开) 表数据如下图: 查询结果如下图: SQL查询脚本: SELECT addPer, house_code = (STUFF((SELECT ',' + house_c ...

  6. 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]

    无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...

  7. 【C++】使用 libass,完成 Direct3D 11 下的字幕渲染

    前言 前段时间曾经写过一个视频播放器:https://www.cnblogs.com/judgeou/p/14746051.html . 然而这个播放器却无法显示出外挂或者内封的字幕,这里要稍微解释一 ...

  8. 一键部署lamp脚本

    #!/bin/bash systemctl stop firewalld systemctl disable firewalld setenforce 0 #-------Apache------ # ...

  9. MySQL-09-SQL执行计划

    SQL执行计划获取及分析 介绍 (1)获取到的是优化器选择完成的,他认为代价最小的执行计划. 作用: 语句执行前,先看执行计划信息,可以有效的防止性能较差的语句带来的性能问题. 如果业务中出现了慢语句 ...

  10. MySQL-02-体系结构

    MySQL体系结构 c/s模型介绍 连接MySQL # TCP/IP方式(远程.本地) mysql -uroot -pAlnk123 -h 10.0.0.51 -P3306 # Socket方式(仅本 ...