xlsx.full.js读取Excel的sheet数据转换成二维数组,sheet_to_array
鉴于js-xlsx.js没有
XLSX.util.sheet_to_array()
方法,于是自己实现了一个。
解析sheet数据为二维数组
// 解析sheet数据为二维数组
function parseExcelSheetToArrays(sheet) {
const Range = {
x1: sheet['!ref'].split(':')[0].match(/^[A-Z]+/)[0],
y1: sheet['!ref'].split(':')[0].match(/\d+$/)[0],
x2: sheet['!ref'].split(':')[1].match(/^[A-Z]+/)[0],
y2: sheet['!ref'].split(':')[1].match(/\d+$/)[0],
};
let tableDataArr = [];
for (let y = Range.y1; y <= Range.y2; y++) { // 行遍历
let rowArr = [];
for (let x = Range.x1.charCodeAt(); x <= Range.x2.charCodeAt(); x++) { // 列遍历 TD:暂时只支持到A~Z列,有需要的自己优化
let position = String.fromCharCode(x) + y;
rowArr.push(sheet[position] ? sheet[position].v : null);
}
tableDataArr.push(rowArr);
}
return tableDataArr;
}
测试方法
function TestFn(){
let file = document.getElementById('input').files[0]; // 获取文件
let reader = new FileReader();
// 读完后的事件
reader.onload = function (e) {
let data = e.target.result;
// 使用XLSX.full.js去解析文件数据
let wb = XLSX.read(data, { type: 'binary'}); //以二进制的方式解析
let sheet0 = wb.Sheets[wb.SheetNames[0]]; //sheet0代表excel表格中的第1个工作表
// 解析为二维数据
let arr = parseExcelSheetToArrays(sheet0);
console.log(arr);
};
// 读取文件
reader.readAsBinaryString(file);
}
效果