当前位置: 代码迷 >> 综合 >> 国际化,将excel表格内容输出,生成自己想要的数据格式
  详细解决方案

国际化,将excel表格内容输出,生成自己想要的数据格式

热度:56   发布时间:2024-02-02 06:28:26.0

 要安装 xlsx库,引入import XLSX from 'xlsx'

<inputref="excel-upload-input"class="excel-upload-input"type="file"accept=".xlsx, .xls, .csv"@change="handleClick"/>
handleUpload() {this.$refs['excel-upload-input'].click();},handleClick(e) {const files = e.target.files;const rawFile = files[0]; // only use files[0]if (!rawFile) return;this.upload(rawFile);},upload(rawFile) {this.$refs['excel-upload-input'].value = null; //this.readerData(rawFile);},readerData(rawFile) {return new Promise((resolve, reject) => {const reader = new FileReader();//使用FileReader对象, FileReader通过异步的方式读取文件内容,结果均是通过事件回调获取reader.onload = e => {const data = e.target.result;// 获取workbook对象,读取excel主要是通过XLSX.read(data, {type: type});方法来实现,返回一个叫WorkBook的对象 type为array是 Uint8Array,8位无符号数组const workbook = XLSX.read(data, { type: 'array' })const firstSheetName = workbook.SheetNames[0] // 是获取Sheets中第一个Sheet的名字const worksheet = workbook.Sheets[firstSheetName] // 获取第一个Sheet的数据const results = XLSX.utils.sheet_to_json(worksheet);  // 输出JSON格式const header = this.getHeaderRow(worksheet)this.generateData({ header, results })  // 处理数据resolve()};reader.onerror = e => {console.log(e, '4')reject(e)}// 以ArrayBuffer方式打开文件  读取本地文件reader.readAsArrayBuffer(rawFile)})},// 获取表头rowgetHeaderRow(sheet) {const headers = []const range = XLSX.utils.decode_range(sheet['!ref'])  //sheet['!ref']:表示所有单元格的范围,例如从A1到F8则记录为A1:F8let Cconst R = range.s.r/* start in the first row */for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]/* find the cell in the first row */let hdr = 'UNKNOWN ' + C // <-- replace with your desired defaultif (cell && cell.t) hdr = XLSX.utils.format_cell(cell)headers.push(hdr)}return headers},generateData({ header, results }) {let arr = []results.map(item => {arr.push({[item['名称2']]: item['ying']})})console.log(JSON.stringify(arr).replace(/\{|\}/g, ''))},

 

  相关解决方案