You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
5.4 KiB
166 lines
5.4 KiB
const xml2js = require('xml2js');
|
|
const parser = new xml2js.Parser();
|
|
const fs = require('fs');
|
|
const moment = require('moment');
|
|
const os = require('os');
|
|
const path = require('path');
|
|
var q = require('qiao-zip');
|
|
const uuidv4 = require('uuid');
|
|
|
|
const sheetlist=async(xlsx)=>{
|
|
const cacheDir = path.join(os.homedir(), '.cache');
|
|
const filedir=cacheDir+'\\learn\\'+uuidv4.v4();
|
|
fs.mkdirSync(filedir);
|
|
await q.unzip(xlsx, filedir)
|
|
const xmlwb=fs.readFileSync(filedir+"/[Content_Types].xml",'utf8');
|
|
const wbresult=await new Promise((resolve,reject)=>{
|
|
parser.parseString(xmlwb, (err, result) => {
|
|
if (err) {
|
|
console.error(err);
|
|
throw err;
|
|
}
|
|
resolve(result);
|
|
});
|
|
})
|
|
//console.log(wbresult);
|
|
let slist=[];
|
|
let wblist=await wblsit(filedir+"/xl/sharedStrings.xml")
|
|
|
|
wbresult.Types.Override.map((value,index)=>{
|
|
//console.log(value);
|
|
if(value['$'].ContentType==="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"){
|
|
slist.push(value['$'].PartName);
|
|
}
|
|
|
|
})
|
|
let chengji=[];
|
|
//console.log(slist);
|
|
let chengname=[];
|
|
for(let i=0;i<slist.length;i++){
|
|
|
|
const biao=await wjb(filedir+slist[i],wblist);
|
|
//
|
|
let xiangnum=-1;//姓名项在第几列
|
|
for(let j=0;j<biao.length;j++){
|
|
if(biao[j].includes("姓名")){
|
|
xiangnum=j;
|
|
break;
|
|
}
|
|
}
|
|
let nameid=biao[xiangnum].indexOf("姓名");
|
|
let xuehaoid=biao[xiangnum].indexOf("学号");
|
|
let sex=biao[xiangnum].indexOf("性别");
|
|
let classid=biao[xiangnum].indexOf("班级");
|
|
let xueyaunid=biao[xiangnum].indexOf("学院");
|
|
let idcardid=biao[xiangnum].indexOf("身份证号");
|
|
let ruxuetime=biao[xiangnum].indexOf("入学日期")
|
|
let iphone=biao[xiangnum].indexOf("学生手机号");
|
|
let parentname=biao[xiangnum].indexOf("家长姓名")
|
|
let parentphone=biao[xiangnum].indexOf("家长手机号")
|
|
//console.log(nameid)
|
|
// console.log(xiangnum);
|
|
//console.log(biao);
|
|
const stulsit=[];
|
|
for(let j=xiangnum+1;j<biao.length;j++){
|
|
let ruxue="" ;
|
|
if( /^\d+$/.test(biao[j][ruxuetime])){
|
|
if (parseInt(biao[j][ruxuetime])<80000){
|
|
ruxue=moment("1900-01-01").add(parseInt(biao[j][ruxuetime])-2,'day').format();
|
|
//console.log(mom);
|
|
}
|
|
}else{
|
|
ruxue=moment(biao[j][ruxuetime]).format();
|
|
}
|
|
const stu={
|
|
name:biao[j][nameid],
|
|
xuehao:biao[j][xuehaoid],
|
|
sex:biao[j][sex],
|
|
classid:biao[j][classid],
|
|
xueyuan:biao[j][xueyaunid],
|
|
idcard:biao[j][idcardid],
|
|
ruxuetime:ruxue,
|
|
iphone:biao[j][iphone],
|
|
parentphone:biao[j][parentphone],
|
|
parentname:biao[j][parentname],
|
|
choose:true
|
|
}
|
|
// console.log(stu);
|
|
stulsit.push(stu);
|
|
}
|
|
chengji.push({stu:stulsit,name:path.parse(filedir+slist[i]).name,add:false});
|
|
chengname.push(path.parse(filedir+slist[i]).name);
|
|
}
|
|
//
|
|
// console.log(chengname);
|
|
// console.log(chengji);
|
|
return chengji;
|
|
}
|
|
const wblsit=async (file)=>{
|
|
const xmlwb=fs.readFileSync(file,'utf8');
|
|
// console.log(xmlwb);
|
|
const wbresult=await new Promise((resolve,reject)=>{
|
|
parser.parseString(xmlwb, (err, result) => {
|
|
if (err) {
|
|
console.error(err);
|
|
throw err;
|
|
}
|
|
resolve(result);
|
|
});
|
|
})
|
|
let wbone=[];
|
|
wbresult.sst.si.map((value)=>{
|
|
//console.log(value);
|
|
wbone.push(value.t[0]);
|
|
})
|
|
//console.log(wbone);
|
|
return wbone;
|
|
}
|
|
const wjb=async(file,list)=>{
|
|
const xmlwb=fs.readFileSync(file,'utf8');
|
|
const wbresult=await new Promise((resolve,reject)=>{
|
|
parser.parseString(xmlwb, (err, result) => {
|
|
if (err) {
|
|
console.error(err);
|
|
throw err;
|
|
}
|
|
resolve(result);
|
|
});
|
|
})
|
|
const excerow=wbresult.worksheet.sheetData[0].row;
|
|
let allexcel=[]
|
|
|
|
wbresult.worksheet.sheetData[0].row.map((value,index)=>{
|
|
let hangexcel=[];
|
|
value.c.map((value,index)=>{
|
|
//console.log(value);
|
|
const t=value['$'].t;
|
|
const v=value.v[0];
|
|
let zhi="";
|
|
// if (parseInt(v)<40000&&parseInt(v)>80000) {
|
|
if (t === undefined) {
|
|
zhi = v;
|
|
} else if (t === 's') {
|
|
zhi = list[parseInt(v)];
|
|
} else {
|
|
zhi = v;
|
|
}
|
|
// }else{
|
|
// zhi =moment("1900-01-01").add(parseInt(v),'days').format('YYYY-MM-DD');
|
|
//}
|
|
|
|
hangexcel.push(zhi);
|
|
|
|
})
|
|
allexcel.push(hangexcel);
|
|
});
|
|
// console.log(allexcel);
|
|
return allexcel;
|
|
}
|
|
//wblsit("C:/Users/l/Desktop/a1/xl/sharedStrings.xml").then(t=>{
|
|
// wjb("C:/Users/l/Desktop/a1/xl/worksheets/sheet1.xml",t)
|
|
//})
|
|
//sheetlist("C:\\Users\\l\\Desktop\\12\\a141.xlsx")
|
|
const cacheDir = path.join(os.homedir(), '.cache');
|
|
console.log(cacheDir);
|
|
exports.sheetlist=sheetlist;
|