sheet.js插件解析excel数据

1、下载

npm install xlsx

2、引入

import XLSX from 'xlsx';

3、使用(file形式)

async uploadFile({ file }) {
    var reader = new FileReader();
    reader.onload = e => {
      const data = e.target.result;
      /**@name cellStyles需开启才有样式数据 */
      const workbook = XLSX.read(data, { type: 'binary', cellStyles: true });
      /**@name 所有工作表数组 */
      const sheets = workbook.Sheets;
      /**@name 所有工作表名数组 */
      const sheetNames = workbook.SheetNames;
      sheetNames.forEach(sheetName => {
        /**@name 取得当前工作表 */
        const sheet = sheets[sheetName];
        /**@name 列样式数据 */
        const colWidthArray = sheet['!cols'];
        /**@name 行样式数据 */
        const rowHeightArray = sheet['!rows'];
        /**@name 存在单元格合并 */
        const merges = sheet['!merges'];
        /**@name 所有单元格范围 */
        const allCell = sheet['!ref'];
    };
    reader.readAsBinaryString(file);
  }

4、解析的数据结构

(1)解析出来是单元格是A1、A2、形式,且顺序是一列一列

5、单元格对象

6、单元格转化方法(由A1转化成{c:C, r:R},c为行,r为列)

encode_cell / decode_cell

(1)因为解析出来的单元格是A1形式,无法直接获取行列,需要转化

//由A1转{c:C, r:R}
const cell = XLSX.utils.decode_cell('A1');
//由{c:C, r:R}转 A1
const cell = XLSX.utils.encode_cell({c:C, r:R});

7、单元格合并(范围)

encode_range / decode_range(如A3:B7 互相转化 {s:{c:0, r:2}, e:{c:1, r:6}}

(1)在解析出来的数据中,单元格合并由属性 !merges 表示(s:start,e:end)

(2)遍历单元格范围(range={s:{c:C, r:R}, e:{c:C, r:R}} )

for(var R = range.s.r; R <= range.e.r; ++R) {
  for(var C = range.s.c; C <= range.e.c; ++C) {
    var cell_address = {c:C, r:R};
    /* if an A1-style address is needed, encode the address */
    var cell_ref = XLSX.utils.encode_cell(cell_address);
  }
}

8、文档

https://github.com/SheetJS/sheetjs

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值