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、文档