function readExcel(file_obj){ var reader = new FileReader(); var file = file_obj.files[0]; reader.readAsBinaryString(file); reader.onload = function (e) { var data = e.target.result; var wb = XLSX.read(data, {type: 'binary'}); sheetName = wb.SheetNames[0] // 获取文档中第一个sheet页签的名字 sheets = wb.Sheets[sheetName] // 获sheet名页签下的数据 const length=XLSX.utils.sheet_to_json(sheets).length const rowIndex = 5; // 指定需要获取的行号 const columnIndex = 3; // 指定需要获取的列号 let columnDate=[];//列 let rowDate=[];// let date=[]; for(let index=columnIndex+1;index<=20;index++){ const cellAddress = XLSX.utils.encode_cell({ r: rowIndex - 1, c: index - 1 }); const cellValue = sheets[cellAddress] ? sheets[cellAddress].v : null; if(cellValue===null){ break }else{ columnDate.push({name:cellValue,index:index}) } } for(let index=rowIndex+1;index<=length;index++){ const cellAddress = XLSX.utils.encode_cell({ r: index - 1, c: columnIndex - 1 }); const cellValue = sheets[cellAddress] ? sheets[cellAddress].v : null; if(cellValue===null){ continue }else{ for(let i=0;i<=columnDate.length;i++){ let column=columnDate[i].index-1 console.log(columnDate[i].index) const cellAddress = XLSX.utils.encode_cell({ r: index - 1, c: column }); console.log(cellAddress) const cellValue = sheets[cellAddress] ? sheets[cellAddress].v : null; console.log(cellValue) date.push(cellValue) } rowDate.push({name:cellValue,index:index}) } } console.log(rowDate); const cellAddress = XLSX.utils.encode_cell({ r: rowIndex - 1, c: columnIndex - 1 }); const cellValue = wb.Sheets[sheetName][cellAddress].v; JSON.stringify(XLSX.utils.sheet_to_json(sheets)); //console.log(XLSX.utils.sheet_to_json(sheets)); // 返回sheet对象到控制台 }; }我这里哪里错了,怎么修改
时间: 2024-02-17 18:05:14 浏览: 149
OBJ.rar_obj_obj files
在第22行的 `for` 循环中,你的循环条件写成了 `i<=columnDate.length`,这会导致循环访问 `columnDate` 数组时超出其索引范围,因为数组的下标是从 0 开始计数的。因此,你需要将循环条件改为 `i<columnDate.length`。
同时,你还需要注意 `columnDate` 数组中的元素数量与你在第29行循环时的下标范围是否一致。因为你在第7行的循环中只取了前20列的数据,所以 `columnDate` 数组中的元素数量最多只有20个,而不是无限多个。因此,在第29行循环时,你需要将循环条件改为 `i<columnDate.length`,否则会访问到未定义的元素。
下面是修改后的代码:
```javascript
function readExcel(file_obj) {
var reader = new FileReader();
var file = file_obj.files[0];
reader.readAsBinaryString(file);
reader.onload = function (e) {
var data = e.target.result;
var wb = XLSX.read(data, { type: 'binary' });
sheetName = wb.SheetNames[0];
sheets = wb.Sheets[sheetName];
const length = XLSX.utils.sheet_to_json(sheets).length;
const rowIndex = 5;
const columnIndex = 3;
let columnDate = []; //列
let rowDate = []; //
let date = [];
for (let index = columnIndex + 1; index <= 20; index++) {
const cellAddress = XLSX.utils.encode_cell({ r: rowIndex - 1, c: index - 1 });
const cellValue = sheets[cellAddress] ? sheets[cellAddress].v : null;
if (cellValue === null) {
break;
} else {
columnDate.push({ name: cellValue, index: index });
}
}
for (let index = rowIndex + 1; index <= length; index++) {
const cellAddress = XLSX.utils.encode_cell({ r: index - 1, c: columnIndex - 1 });
const cellValue = sheets[cellAddress] ? sheets[cellAddress].v : null;
if (cellValue === null) {
continue;
} else {
for (let i = 0; i < columnDate.length; i++) {
let column = columnDate[i].index - 1;
console.log(columnDate[i].index);
const cellAddress = XLSX.utils.encode_cell({ r: index - 1, c: column });
console.log(cellAddress);
const cellValue = sheets[cellAddress] ? sheets[cellAddress].v : null;
console.log(cellValue);
date.push(cellValue);
}
rowDate.push({ name: cellValue, index: index });
}
}
console.log(rowDate);
const cellAddress = XLSX.utils.encode_cell({ r: rowIndex - 1, c: columnIndex - 1 });
const cellValue = wb.Sheets[sheetName][cellAddress].v;
JSON.stringify(XLSX.utils.sheet_to_json(sheets));
//console.log(XLSX.utils.sheet_to_json(sheets)); // 返回sheet对象到控制台
};
}
```
希望能帮到你。
阅读全文