表格上传包括单元格合并类
表格上传封装
此处包含未合并的单元格或者合并过的单元格表格上传
封装类:
/*
* @Author: menxiaojin
* @Date: 2023-04-18 11:11:36
* @LastEditors: menxiaojin
* @LastEditTime: 2023-04-20 16:45:52
*/
import * as XLSX from 'xlsx'
import {message} from './message';
export default class ExcelReader {
constructor(file) {
this.excelData = null
this.mergeMap = {}
// this.read(file)
}
read(file) {
var that = this
return new Promise(function(resolve, reject) {
const reader = new FileReader()
reader.onload = function(e) {
// console.log('==',e)
const data = e.target.result
let datajson = XLSX.read(data, {
type: 'binary',
cellDates: true
})
let worksheet = datajson.Sheets[datajson.SheetNames[0]]; // 只能通过工作表名称来获取指定工作表
that.excelData = worksheet
that.initMerge() //初始化合并单元格信息
const result = []
datajson.SheetNames.forEach(sheetName => {
result.push({
sheetName: sheetName,
// sheet: XLSX.utils.sheet_to_json(datajson.Sheets[sheetName])
sheet: XLSX.utils.sheet_to_json(that.excelData) //打印出所需的数据
})
})
// console.log('===>>>>',datajson)
resolve(result)
}
reader.readAsBinaryString(file.file)
})
// return '123'
}
/**
* 初始合并单元格
* excel合并单元格后默认只有左上角的单元格保留值 此方法会将所有合并的单元格都赋值
*/
initMerge() {
const merges = this.excelData['!merges'];
if(!merges) return
merges.forEach(p => {
let columnIndex = p['s']['c']
const endColumn = p['e']['c']
let rowIndex = p['s']['r']
const endRow = p['e']['r']
//合并单元格的起止行 列
const startColumn = createCol(p['s']['c'])
const startRow = p['s']['r'] + 1
while (columnIndex <= endColumn) {
rowIndex = p['s']['r']
while (rowIndex <= endRow)
