| | |
| | | |
| | | state = { |
| | | excelbtn: null, |
| | | primaryId: '', // 行Id |
| | | excelId: Utils.getuuid() |
| | | } |
| | | |
| | | exceltrigger = (item) => { |
| | | exceltrigger = (item, primaryId) => { |
| | | const { excelId } = this.state |
| | | this.setState({ |
| | | excelbtn: item |
| | | excelbtn: item, |
| | | primaryId: primaryId |
| | | }) |
| | | |
| | | let _excelInput = document.getElementById(excelId + this.props.MenuID) |
| | |
| | | } |
| | | } |
| | | onImportExcel = file => { |
| | | const { excelbtn } = this.state |
| | | const { excelbtn, primaryId } = this.state |
| | | |
| | | let columns = excelbtn.verify.columns.map(option => option.Column) |
| | | let range = excelbtn.verify.range || 0 |
| | |
| | | // 以二进制流方式读取得到整份excel表格对象 |
| | | const workbook = XLSX.read(result, { type: 'binary' }) |
| | | |
| | | let errors = [] |
| | | if (range === 1) { |
| | | workbook.SheetNames.forEach(sheetname => { |
| | | if (workbook.Sheets.hasOwnProperty(sheetname)) { |
| | | let header = XLSX.utils.sheet_to_json(workbook.Sheets[sheetname], {header: columns})[0] |
| | | |
| | | if (!header) { |
| | | errors.push(sheetname) |
| | | } else { |
| | | let iserror = false |
| | | excelbtn.verify.columns.forEach(op => { |
| | | if (header[op.Column] !== op.Text) { |
| | | iserror = true |
| | | } |
| | | }) |
| | | let errors = null |
| | | |
| | | if (iserror) { |
| | | errors.push(sheetname) |
| | | } |
| | | if (!workbook.Sheets.hasOwnProperty(excelbtn.verify.sheet)) { |
| | | errors = 'notexit' |
| | | } else if (range === 1) { |
| | | let header = XLSX.utils.sheet_to_json(workbook.Sheets[excelbtn.verify.sheet], {header: columns})[0] |
| | | |
| | | if (!header) { |
| | | errors = 'empty' |
| | | } else { |
| | | let iserror = false |
| | | excelbtn.verify.columns.forEach(op => { |
| | | if (header[op.Column] !== op.Text) { |
| | | iserror = true |
| | | } |
| | | }) |
| | | |
| | | if (iserror) { |
| | | errors = 'headerError' |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | let data = [] |
| | | |
| | | workbook.SheetNames.forEach(sheetname => { |
| | | if (workbook.Sheets.hasOwnProperty(sheetname)) { |
| | | data = data.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheetname], {header: columns, range: (range)})) |
| | | } |
| | | }) |
| | | if (!errors) { |
| | | data = XLSX.utils.sheet_to_json(workbook.Sheets[excelbtn.verify.sheet], {header: columns, range: (range)}) |
| | | } |
| | | |
| | | // 最终获取到并且格式化后的 json 数据 |
| | | this.props.returndata(data, excelbtn, errors) |
| | | this.props.returndata(data, excelbtn, errors, primaryId) |
| | | this.setState({ |
| | | excelId: '' |
| | | excelId: '', |
| | | primaryId: '' |
| | | }, () => { |
| | | this.setState({ |
| | | excelId: Utils.getuuid() |