前段时间项目有个需求,老板要求在项目后台做个静态表格数据页面,里面需要包含有多条数据
一开始想法是做就做吧,反正就是个静态页面,做一些假数据就好了,结果做好了之后,老板那边却发了个xlsx表格过来,让咱将表格的数据导进去。
我的天,一打开文件,里面几十条数据,没办法,作为一名高端程序猿,能偷懒的情况下,怎能不偷一下懒呢。
于是在网上打到这么一个插件‘xlsx.js’。
在这之前,先看下表格数据吧,自己另起了一份文件

表格数据有了,接下来就是安装插件
npm i xlsx -s
插件安装好之后,就是写代码了,直接上代码:
import axios from 'axios';
const XLSX = require('xlsx')
import transformSheets from './read_xlsx'; //导入转制函数
created() {
var url = "/task_list.xlsx" //放在public目录下可以直接访问
//读取二进制excel文件,参考https://github.com/SheetJS/js-xlsx#utility-functions
axios.get(url, {responseType:'arraybuffer'}).then((res) => {
var data = new Uint8Array(res.data);
var wb = XLSX.read(data, {type:"array"}, '-j');
var sheets = wb.Sheets;
var content = transformSheets(sheets); // 整理xlsx返回的数据
console.log('content:');
console.log(content);
var list = [];
var arr = content.slice(1);
for (var i = 0; i < arr.length; i++) {
var obj = {};
arr[i].forEach((item, index) => {
obj['data'+(index+1)] = item;
if(index + 1 == 9){
obj['data'+(index+1)] = this.formatExcelDate(item);
}
})
list.push(obj);
}
console.log('list:');
console.log(list);
this.tableCfg.tableData = list;
}).catch( err =>{
this.err = err;
})
},
methods:{
// 处理表格中的日期时间
formatExcelDate (numb, format = "-") {
// 如果numb为空则返回空字符串
if (!numb) {
return "";
}
let time = new Date(new Date("1900-1-1").getTime() + (numb - 1) * 3600*24*1000);
const year = time.getFullYear() + '';
const month = time.getMonth() + 1 + '';
const date = time.getDate();
if (format && format.length === 1) {
return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
}
return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
}
}
以下为read_xlsx.js文件的代码:
const XLSX = require('xlsx')
//将行,列转换
function transformSheets(sheets) {
var content = []
var content1 = []
var tmplist = []
for (let key in sheets){
//读出来的workbook数据很难读,转换为json格式,参考https://github.com/SheetJS/js-xlsx#utility-functions
tmplist.push(XLSX.utils.sheet_to_json(sheets[key]).length)
content1.push(XLSX.utils.sheet_to_json(sheets[key]))
}
var maxLength = Math.max.apply(Math, tmplist)
//进行行列转换
for (let y in [...Array(maxLength)]){
content.push([])
for (let x in [...Array(tmplist.length)]) {
try {
for (let z in content1[x][y]){
content[y].push(content1[x][y][z])
}
} catch (error) {
content[y].push(' ')
}
}
}
content.unshift([])
for (let key in sheets){
content[0].push(key)
}
return content
}
export {transformSheets as default}
最后运行起来后返回的内容:

以上大功告成!!!

8040

被折叠的 条评论
为什么被折叠?



