xlsx模块前端_[SheetJS]js-xlsx模块学习指南
简介
SheetJS是前端操纵Excel以及相似的⼆维表的最好挑选之⼀,⽽js-xlsx是它的社区版本.
js-xlsx将注重⼒集合到了数据转换和导出上,所以它⽀撑相当多品种的数据剖析和导出.不单单议局限于⽀撑xlsx花样.
它可以:
剖析相符花样的数据
导出相符花样的数据
应⽤中间层操纵数据
可以运⾏在:
浏览器端
Node端
浏览器端特征
纯浏览器端剖析数据
纯浏览器端导出数据
Node端特征
读写⽂件
流式读写
本篇⽂章⼒图精简,重要议论⼀下js-xlsx的事情流程和基础观点以及运⽤体式格局.
观点
js-xlsx供应了⼀个中间层⽤于操纵数据,他将差别范例的⽂件笼统成同⼀个js对象,从⽽规避了操纵差别品种数据数据之间的复杂性.⽽且围绕着这个对象供应了⼀系列的笼统功⽤,本⼩节重要议论这些数据对象与Excel数据之间的关联.
⽽浏览器端和Node端的区分仅仅在于如何导⼊⽂件和导出⽂件上罢了,关于数据的操纵,两边的接⼝
是⼀致的.
引⼊
js-xlsx的引⼊异常简朴,浏览器端引⼊可以是最基础script标签的情势.
在node端,运⽤npm装置以下模块:
npm install xlsx --save
在Node中以下引⼊:
const xlsx = require('xlsx');
对应关联
在这个表格中我列举了Excel与js-xlsx之间的关联:
Excel名词
js-xlsx中的笼统范例
事情簿
workBook
Sheets
Excel援⽤款式(单元格地点)
cellAddress
单元格
cell
有了这个基础的对应关联我们就可以轻松的明⽩后续的操纵,例如在我们运⽤Excel的历程当中,猎取⼀个数据的流程以下:翻开事情簿
翻开⼀个事情表
选中⼀⽚地区或许⼀个单元格
针对数据举⾏操纵
保留(另存为)
那末在js-xlsx中猎取⼀个单元格内容的操纵以下:
// 先不要体贴我们的workbook对象是从哪⾥来的
var first_sheet_name = workbook.SheetNames[0]; // 猎取事情簿中的事情表名字
var address_of_cell = 'A1'; // 供应⼀个援⽤款式(单元格下标)
var worksheet = workbook.Sheets[first_sheet_name]; // 猎取对应的事情表对象
var desired_cell = worksheet[address_of_cell]; // 猎取对应的单元格对象
var desired_value = (desired_cell ? desired_cell.v : undefined);// 猎取对应单元格中的数据
数据花样
图⽚:事情簿的数据结构
⼀旦我们的Excel⽂件被剖析那末这个Excel表中的⼀切内容都会被剖析上⾯的这个对象.⽽且这全部历
程是同步完成的.所以我们可以运⽤键的体式格局来直接猎取数据,在上⾯的例⼦中我们就应⽤键⼀层层的向下猎取数据.
上图中经常使⽤的键⼀共有两个:
SheetNames以字符串数组的情势保留了⼀切的事情表的称号
Sheets下的内容都是事情表对象,⽽键名就是SheetNames中包括的名字
⽽Excel的数据单元由⼩到⼤有以下排序以下:
单元格
事情表
事情簿
单元格花样
在Excel中单元格有多种花样,⽽js-xlsx会将其剖析为对应的JavaScript的花样.
罕见花样以下:
v
源数据(未经处置惩罚的数据)
w
花样化后的⽂本(假如可以被花样化)
t
单元格范例(详细范例请看下⽅的表格)
r
解码后的富⽂本(假如可以被解码)
h
渲染成HTML花样的富⽂本(假如可以被解码)
c
单元格解释
z
花样化成字符串的数值(假如需要的话)
js 二维数组完全花样链接.
剖析后单元格数据花样:
这个数据在Excel中保留在A1的位置上,⽂本范例,单元格内容为xm.
单元格地点
js-xlsx运⽤有两种体式格局来形貌操纵中的单元格地区.
⼀种是单元格地点对象(Cell address object)别的⼀种是地点局限(Cell range).地点对象花样以下:
const start = { c: 0, r: 0 };
const end = { c: 1, r: 1 };
上⽅地点对象对应的地点局限以下:
const range = 'A1:B2';
我们不难发明两者之间对应的关联:
地点对象形貌的是⼀个肇端坐标(从0最先)到完毕坐标之间的局限.
地点局限就是Excel中的援⽤款式.
注重:这两个观点会在事情表读写中运⽤到.
API
js-xlsx供应的接⼝异常清楚重要分为两类:
xlsx对象⾃⾝供应的功⽤
剖析数据
导出数据
utils东西类
将数据添加到数据表对象上
将⼆维数组以及相符花样的对象或许HTML转为事情表对象
将事情簿转为别的⼀种数据花样
⾏,列,局限之间的转码和解码
事情簿操纵
单元格操纵
读取数据并剖析
这⾥供应⼀个简朴的Node例⼦(Node10+):
const xlxs = require('xlsx');
const {readFile} = require('fs').promises;
(async function (params) {
// 猎取数据
const excelBuffer = await readFile('./books.xlsx');
// 剖析数据
const result = ad(excelBuffer,{
type:'buffer',
cellHTML:false,
});
console.log('TCL: result', result);
})();
还可以运⽤utils.book_new()建⽴⼀个新的事情簿对象:
const
xlsx = require('xlsx'),
{ utils } = xlsx;
const workBook= utils.book_new(); // 建⽴⼀个事情簿
然后运⽤跟多的东西来操纵事情簿对象:
// 接着上⾯的例⼦
const ws_data = [
[ "S", "h", "e", "e", "t", "J", "S" ],
[ 1 , 2 , 3 , 4 , 5 ]
];
const workSheet = XLSX.utils.aoa_to_sheet(ws_data);// 运⽤⼆维数组建⽴⼀个事情表对象
utils.book_append_sheet(workBook,workSheet,'事情表称号');// 向事情簿追加⼀个事情表console.log(workBook);
数据添补
事情表是现实寄存数据的处所,在⼤部份情况下我们的操纵都是关于事情表对象的操纵.
js-xlsx供应了多种体式格局来操纵数据,这⾥供应最罕见的⼏种操纵:
应⽤现有的数据结构建⽴事情表
⼆维数组作为数据源
JSON作为数据源
修正事情表数据
⼆维数组作为数据源
JSON作为数据源
建⽴事情表
const workSheet = utils.aoa_to_sheet([[1,2,3,new Date()],[1,2,,4]],{
sheetStubs:false,
cellStyles:false,
cellDates:true // 剖析为原⽣时候
});
console.log(workSheet);
⼆维数组的关联异常轻易明⽩,数组中的每个数组代表⼀⾏.
图⽚:⼆维数组结果
const workSheet =
utils.json_to_sheet([
{ '列1': 1, '列2': 2, '列3': 3 },
{ '列1': 4, '列2': 5, '列3': 6 }
],{
header:['列1','列2','列3'],
skipHeader:true// 跳过上⾯的题⽬⾏
})
console.log(workSheet);
图⽚:JSON结果
修正数据表数据
const workSheet =
utils.json_to_sheet([

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。