New Git https://git.sheetjs.com/SheetJS/sheetjs
Old Git https://github.com/SheetJS/sheetjs
在线导出案例 https://sheetjs.com/demo/table.html
在线文档
https://docs.sheetjs.com/docs
Github https://github.com/SheetJS/docs.sheetjs.com
相关 excel
https://github.com/protobi/js-xlsx/
canvas-datagrid
xlsx cdn
一般情况下用 xlsx.core.min.js 就够了,xlsx.full.min.js 则是包含了所有功能模块
// pnpm add xlsx
https://unpkg.com/browse/xlsx@0.18.5/
https://unpkg.com/browse/xlsx@0.18.5/dist/xlsx.core.min.js
read
read(data, {type: ‘binary’}) 解析data数据 解析的类型, type 类型
- base64: 以base64方式读取;
- binary: BinaryString格式(byte n is data.charCodeAt(n))
- string: UTF8编码的字符串;
- buffer: nodejs Buffer;
- array: Uint8Array,8位无符号数组;
- file: 文件的路径(仅nodejs下支持
js 读取 xlsx 参考
http://blog.haoji.me/js-excel.html#dao-chu-excel
// 读取本地 excel文件
function readWorkbookFromLocalFile(file, callback) {
const reader = new FileReader();
reader.onload = function(e) {
const data = e.target.result;
const workbook = XLSX.read(data, {type: 'binary'});
if(callback) callback(workbook);
};
reader.readAsBinaryString(file);
}
workbook
// 将workbook装化成blob对象
function workbook2blob(workbook) {
// 生成excel的配置项
var wopts = {
// 要生成的文件类型
bookType: "xlsx",
// // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
bookSST: false,
type: "binary"
};
var wbout = XLSX.write(workbook, wopts);
// 将字符串转ArrayBuffer
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
return buf;
}
var blob = new Blob([s2ab(wbout)], {
type: "application/octet-stream"
});
return blob;
}
// 将blob对象创建bloburl,然后用a标签实现弹出下载框
function openDownloadDialog(blob, fileName) {
if (typeof blob == "object" && blob instanceof Blob) {
blob = URL.createObjectURL(blob); // 创建blob地址
}
var aLink = document.createElement("a");
aLink.href = blob;
// HTML5新增的属性,指定保存文件名,可以不要后缀,注意,有时候 file:///模式下不会生效
aLink.download = fileName || "";
var event;
if (window.MouseEvent) event = new MouseEvent("click");
// 移动端
else {
event = document.createEvent("MouseEvents");
event.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
aLink.dispatchEvent(event);
}
let sheet1data = [{ department: "行政部", count: 2 }, { department: "前端部", count: 2 }];
let sheet2data = [{ name: "张三", do: "整理文件" }, { name: "李四", do: "打印" }];
let sheet3data = [{ name: "张大人", do: "vue" }, { name: "李大人", do: "react" }];
var sheet1 = XLSX.utils.json_to_sheet(sheet1data);
var sheet2 = XLSX.utils.json_to_sheet(sheet2data);
var sheet3 = XLSX.utils.json_to_sheet(sheet3data);
/* create a new blank workbook */
var wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, sheet1, "部门统计");
XLSX.utils.book_append_sheet(wb, sheet2, "行政部");
XLSX.utils.book_append_sheet(wb, sheet3, "前端部");
const workbookBlob = workbook2blob(wb);
openDownloadDialog(workbookBlob, `部门统计.xlsx`);
Sheets
const { Sheets, SheetNames } = workbook
// 第一个 sheet
Sheets[SheetNames[0]]