//chrome brower need F12-> Network->disable cache // *************************重要: //1. eval(fun + "('不是数字!')");小心使用,会把字符串参数,转为数学运算,如参数为:"2022-01-01",转为2022-1-1=2020,所以,无论是什么类型的参数,都加上双引号或单引号,不让其认为是计算公式; //2. window[fun]( txt );在vue中使用,存在兼容问题 var str2=null; function import_excel_to_json(file){ return new Promise(function (resolve, reject) { let jsonData = {}; let reader = new FileReader(); reader.readAsBinaryString(file); reader.onload = function () { let data = reader.result let workbook = XLSX.read(data, { type: 'binary' }) resolve(workbook); } }) }; // 读取本地excel文件 function readWorkbookFromLocalFile(file, callback) { var reader = new FileReader(); reader.onload = function (e) { var data = e.target.result; var workbook = XLSX.read(data, { type: 'binary' }); if (callback) callback(workbook); }; reader.readAsBinaryString(file); //reader.readAsArrayBuffer(file); } //sheet数 function SheetAmount(workbook){ if (workbook.SheetNames.length >= 15) { return true; } else { return "少于15个表,不是正确日报文件!"; } } //sheet是否存在 function HaveSheets(workbook){ var arraySheetNames = ["B1","B2","B3","B4","B6","B7","B8","B9","B10","B11","B12","B13","B14","B15","C"]; let arrStr = new Array(arraySheetNames.length).fill(""); var sheetNames = workbook.SheetNames; // 工作表名称集合 for (let i = 0; i < arraySheetNames.length; i++) { for (let index = 0; index < sheetNames.length; index++) { if (arraySheetNames[i] === sheetNames[index]) { arrStr[i]=arraySheetNames[i]; } } } var flag = true; var str ="不存在的表: "; for (let n = 0; n < arrStr.length; n++) { if (arrStr[n] === "") { flag = false; str += arraySheetNames[n] + " "; } } if (flag === true) { return true; } else { return str; } }//sheet是否存在 //是否为空表,2022-4-20停用,新函数为HaveData3Para /* function HaveDatas(workbook){ var worksheet = workbook.Sheets["C"]; if (worksheet["C16"] === undefined) { return "单元格: C16 " + " -> 空值!" + '\n'; } else { if (worksheet["C16"].v > 0){ return true; }else{ return "表C单元格C16 " + " 等于或小于 0,无需上报!" + '\n'; } } }*/ function 项目号(str) { if (str.length != 10){ return "所填:"+ str +",不是10字符!"; }else if(str.substr(0,1)!="U" || !myIsNaN(str.substr(1,4)) || str.substr(5,1)!="P" || !myIsNaN(str.substr(6,4)) ){ return "所填:"+ str +",格式有误!"; }else{ return true; }; }; // 检验日报excel文件 function readWorkbook(workbook,logID,strDate,userID,unitID,projectID) { var arraySheetNames = ["B1","B2","B3","B4","B6","B7","B8","B9","B10","B11","B12","B13","B14","B15"]; var arrayFunNames=[ ["必填","站归类B1","区域归类","经度","纬度","文字","日期","上传人","单元号","项目号","受阻归类","通过"], ["必填","站归类B2","区域归类","经度","纬度","文字","日期","上传人","单元号","项目号","通过"], ["必填","段归类","区域归类","文字","数值","日期","上传人","单元号","项目号","通过"], ["必填","段归类","区域归类","文字","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","日期","上传人","单元号","项目号","数值","通过"], ["必填","室分归类B7","经度","纬度","文字","数值","日期","上传人","单元号","项目号","通过"], ["必填","室分归类B8","经度","纬度","文字","数值","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","室分归类B9","经度","纬度","文字","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","经度","纬度","文字","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","经度","纬度","文字","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","经度","纬度","文字","数值","日期","上传人","单元号","项目号","通过"], ["必填","经度","纬度","文字","数值","日期","上传人","单元号","项目号","通过"], ["日期","文字","文字","上传人","单元号","项目号","交通归类","用车归类","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","文字","通过"], ["日期","单元号","项目号","上传人","文字","文字","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","通过"] ]; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=i+2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { // alert(index); if (arrayFunNames[i][index]==="日期") { //alert(window[arrayFunNames[i][index]](worksheet[cell_ref].v,strDate)); if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }else if (formatExcelDate(worksheet[cell_ref].v,"-") != strDate) { document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ formatExcelDate(worksheet[cell_ref].v,"-") +",不等于所选:" + strDate + '\n'; }; } else if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else if (arrayFunNames[i][index]==="单元号") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }else if (worksheet[cell_ref].v != unitID) { document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ worksheet[cell_ref].v +",不等于用户归属:" + unitID + '\n'; }; }else if (arrayFunNames[i][index]==="项目号") { var strs= new Array(); var bHaveMoreID=false if (projectID.includes(',') && !projectID.includes(',')) { strs = projectID.split(',') bHaveMoreID=true } else if (projectID.includes(',') && !projectID.includes(',') ) { strs = projectID.split(',') bHaveMoreID=true }else if (projectID.includes(',') && projectID.includes(',') ) { document.getElementById(logID).innerHTML += "所填:"+ projectID +",同时包含中英文豆号!"+ '\n'; } if (bHaveMoreID) { for (let index = 0; index < strs.length; index++) { if (项目号(strs[index]) != true) { document.getElementById(logID).innerHTML += 项目号(strs[index])+ '\n'; } } var bEqual=false for (let index = 0; index < strs.length; index++) { if (worksheet[cell_ref].v == strs[index]) { bEqual = true } } if (bEqual != true ) { document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ worksheet[cell_ref].v +",不含于:" + projectID + '\n'; } } else { if (worksheet[cell_ref].v != projectID) { document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ worksheet[cell_ref].v +",不等于:" + projectID + '\n'; }; } if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; } }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet };//// 检验日报excel文件 //自定义单元格核验函数///////////////////////////////////////////////////////////////////////////////////////////////////// function 必填(str) { //要求非空字符,非0 if(str.toString()==="0"){ return "所填为0!"; }else if(myTrim(str)===""){ return "所填为空!"; }else{ return true; }; }; function 站归类B1(str) { var arrStr = ["新址","共址","维护","微站"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:新址|共址|维护|微站 !"; }else{ return true; }; }; function 站归类B2(str) { var arrStr = ["新址","共址","维护","微站","存满","软扩"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:新址|共址|维护|微站|存满|软扩 !"; }else{ return true; }; }; function 区域归类(str) { var arrStr = ["城区","非城区"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:城区|非城区 !"; }else{ return true; }; }; function 经度(str) { if (!myIsNaN(str)){ return "所填:"+ str +",不是数值!"; }else if(str>140||str<60){ return "所填:"+ str +",不在区间60-140!"; }else{ return true; }; }; function 纬度(str) { if (!myIsNaN(str)){ return "所填:"+ str +",不是数值!"; }else if(str>125||str<1){ return "所填:"+ str +",不在区间1-125!"; }else{ return true; }; }; function 文字(str) { if (myIsNaN(str)){ return "所填:"+ str +",是数值!"; }else if(myTrim(str)===""){ return "所填为空!"; }else{ return true; }; }; function 日期(strX) { var str=formatExcelDate(strX,"-") if(isNaN(str) && !isNaN(Date.parse(str))) { return true; }else{ return "所填:"+ str +",不是日期格式!"; }; }; function 上传人(str,userID) { if (str != userID) { return "所填:"+ str +",和用户名:"+ userID +",不相等!"; }else{ return true; }; }; //2022-4-21停用,使用只有1个参数的新版 /*function 单元号(str,unitID) { if (str != unitID) { return "所填:"+ str +",和用户单元号:"+ unitID +",不相等!"; }else{ return true; }; };*/ //2022-4-22停用,使用只有1个参数的新版 /*function 项目号(str,projectID) { if (str != projectID) { return "所填:"+ str +",和所选项目号:"+ projectID +",不相等!"; }else{ return true; }; };*/ function myMatch(arrClass,str) { var b=false for (let index = 0; index < arrClass.length; index++) { if (arrClass[index]===str) { b=true } } return b; }; function 受阻归类(str) { var arrStr = ["成功","部分","失败"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:成功|部分|失败 !"; }else{ return true; }; }; function 段归类(str) { var arrStr = ["新建管道","干线","城域","家集客"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:新建管道|干线|城域|家集客 !"; }else{ return true; }; }; function 数值(str) { if (!myIsNaN(str)){ return "所填:"+ str +",不是数值!"; }else{ return true; }; }; function 室分归类B7(str) { var arrStr = ["信源改造","传统分布","新型分布"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:信源改造|传统分布|新型分布 !"; }else{ return true; }; }; function 室分归类B8(str) { var arrStr = ["传统分布","新型分布"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:传统分布|新型分布 !"; }else{ return true; }; }; function 室分归类B9(str) { if(str != "仅信源"){ return "所填:"+ str +",不是:仅信源 !"; }else{ return true; }; }; function 交通归类(str) { var arrStr = ["租公司车","租个人车","打车","网约车","公交地铁","步行","他方出车","按出图包干"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:租公司车|租个人车|打车|网约车|公交地铁|步行|他方出车|按出图包干 !"; }else{ return true; }; }; function 用车归类(str) { var arrStr = ["普通车","越野车","其他"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:普通车|越野车|其他 !"; }else{ return true; }; }; function myTrim(x) { var x2 = String(x); return x2.replace(/^\s+|\s+$/gm,''); }; function myIsNaN(value) { let numX = Number(value); return typeof numX === 'number' && !isNaN(numX); }; function isNumber(val){ var regPos = /^\d+(\.\d+)?$/; var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; if(regPos.test(val) && regNeg.test(val)){ return true; }else{ return false; } } function CheckFile(obj) { alert( typeof obj); alert(obj.value); console.log(obj); var array = new Array('xlsx'); //可以上传的文件类型'gif', 'jpeg', 'png', 'jpg' if (obj.value == '') { alert("选择要上传的xlsx文件!"); return false; } else { var fileContentType = obj.value.match(/^(.*)(\.)(.{1,8})$/)[3]; //这个文件类型正则很有用:) var isExists = false; for (var i in array) { if (fileContentType.toLowerCase() == array[i].toLowerCase()) { isExists = true; //can next sub readWorkbookFromLocalFile(obj, function(workbook) { readWorkbook(workbook); }); return true; } } if (isExists == false) { obj.value = null; alert("文件类型不是xlsx!"); return false; } return false; } }; /** * 格式化excel传递的时间 * @param numb 需转化的时间 43853 * @param format 分隔符 "-" * @returns {string} 2020-1-22 */ function formatExcelDate(numb, format) { const old = numb - 1; const t = Math.round((old - Math.floor(old)) * 24 * 60 * 60); const time = new Date(1900, 0, old, 0, 0, t) const year = time.getFullYear() ; const month = time.getMonth() + 1 ; const date = time.getDate() ; return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date) }; //数字列转字母列 str2="";//全局变量,用之前str2="",用完了要手工str2=null; function number2alphabet(number){ // number要大于0 var str1="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (number <= 26 ) { //var num1 = parseInt(number / 26); var num2 = number % 26 if (num2 === 0) { str2 += "Z"; } else { str2 += str1.charAt(num2-1);//charAt从0开始的 }; } else { var num1=parseInt(number / 26); var num2= number % 26; if (num1 >= 2 && num2 === 0) { num1 -= 1 ; } number2alphabet(num1); if (num2 === 0) { str2 += "Z"; } else { str2 += str1.charAt(num2-1);//charAt从0开始的 }; }; return str2; }; //generate json string from workbook function makeJSONstring(workbook){ var arraySheetNames = ["B1","B2","B3","B4","B6","B7","B8","B9","B10","B11","B12","B13","B14","B15"]; var arrayFunNames=[ ["必填","站归类B1","区域归类","经度","纬度","文字","日期","上传人","单元号","项目号","受阻归类","通过"], ["必填","站归类B2","区域归类","经度","纬度","文字","日期","上传人","单元号","项目号","通过"], ["必填","段归类","区域归类","文字","数值","日期","上传人","单元号","项目号","通过"], ["必填","段归类","区域归类","文字","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","日期","上传人","单元号","项目号","数值","通过"], ["必填","室分归类B7","经度","纬度","文字","数值","日期","上传人","单元号","项目号","通过"], ["必填","室分归类B8","经度","纬度","文字","数值","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","室分归类B9","经度","纬度","文字","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","经度","纬度","文字","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","经度","纬度","文字","数值","数值","日期","上传人","单元号","项目号","通过"], ["必填","经度","纬度","文字","数值","日期","上传人","单元号","项目号","通过"], ["必填","经度","纬度","文字","数值","日期","上传人","单元号","项目号","通过"], ["日期","文字","文字","上传人","单元号","项目号","交通归类","用车归类","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","文字","通过"], ["日期","单元号","项目号","上传人","文字","文字","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","通过"] ]; var strB=""; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=i+2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; }; ///////////////////under this line special for income xlsx file ////////////////////////////////// function 年月(str) { var str1 = str.substr(0,4); var str2 = str.substr(4,2); if(isNaN(str1+"-"+str2+"-01") && !isNaN(Date.parse(str1+"-"+str2+"-01"))) { return true; }else{ return "所填:"+ str +",不是年月!"; }; }; function 是否(str) { var arrStr = ["是","否"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:是|否 !"; }else{ return true; }; }; function 收入凭证(str) { var arrStr = ["无","邮件","聊天截图","签证图片","其他"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:无|邮件|聊天截图|签证图片|其他 !"; }else{ return true; }; }; function 结算模式(str) { var arrStr = ["比例","计件","人天","比例计件","比例人天","计件人天","比例计件人天"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:比例|计件|人天|比例计件|比例人天|计件人天|比例计件人天 !"; }else{ return true; }; }; function 通过(str) { return true; }; //Single sheet是否存在 function HaveSingleSheetName(workbook,sheetname){ var flag = false; var sheetNames = workbook.SheetNames; // 工作表名称集合 for (let index = 0; index < sheetNames.length; index++) { if (sheetname === sheetNames[index]) { flag = true; } } if (flag === true) { return true; } else { return sheetname + ",表不存在!"; } } ; //Single sheet是否存在 //是否为空表3参数通用版 function HaveData3Para(workbook,sheetname,cellname){ var worksheet = workbook.Sheets[sheetname]; if (worksheet[cellname] === undefined) { var worksheet = workbook.Sheets[sheetname]; return "表"+ sheetname +"单元格" + cellname + " 为空!" + '\n'; } else { if (worksheet[cellname].v > 0){ return true; }else{ return "表"+ sheetname +"单元格" + cellname + " 等于或小于 0,无需上报!" + '\n'; } } }; // 检验收入excel文件 function checkIncomeFile(workbook,logID,strYYYYMM,userID,unitID) { var arraySheetNames = ["SR"]; var arrayFunNames=[ ["年月","单元号","上传人","文字","文字","文字","文字","日期","日期","是否","数值","数值","收入凭证","结算模式","文字","文字","通过","通过"] ]; var stc = workbook.Sheets["SR"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["T"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["T"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { // alert(index); if (arrayFunNames[i][index]==="年月") { //alert(window[arrayFunNames[i][index]](worksheet[cell_ref].v,strDate)); if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }else if (worksheet[cell_ref].v != strYYYYMM) { document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ worksheet[cell_ref].v +",不等于所选:" + strYYYYMM + '\n'; }; } else if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else if (arrayFunNames[i][index]==="单元号") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }else if (worksheet[cell_ref].v != unitID) { document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ worksheet[cell_ref].v +",不等于用户归属:" + unitID + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet };//// 检验收入excel文件 //generate income data to json string from workbook function makeIncomeJSONstring(workbook){ var arraySheetNames = ["SR"]; var arrayFunNames=[ ["年月","单元号","上传人","文字","文字","文字","文字","日期","日期","是否","数值","数值","收入凭证","结算模式","文字","文字","通过","通过"] ]; var strB=""; var stc = workbook.Sheets["SR"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["T"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["T"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate income data to json string from workbook ///////////////////under this line start for balance xlsx file ////////////////////////////////// function 单元号(str) { if (str.length != 5){ return "所填:"+ str +",不是5字符!"; }else if(str.substr(0,1)!="U" || !myIsNaN(str.substr(1,4))){ return "所填:"+ str +",格式有误!"; }else{ return true; }; }; function 住宿归类(str) { var arrStr = ["宾馆","宿舍"]; if(!myMatch(arrStr,str)){ return "所填:"+ str +",不是其一:宾馆|宿舍 !"; }else{ return true; }; }; // 检验 支援 excel文件 function checkBalanceFile(workbook,logID,strStartDate,strEndDate,userID) { var arraySheetNames = ["GRZY","JJZY"]; var arrayFunNames=[ ["文字","单元号","单元号","日期","住宿归类","数值","上传人","通过"], ["文字","单元号","单元号","日期","文字","文字","文字","数值","数值","数值","上传人","通过"] ]; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=i+2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { // alert(index); if (arrayFunNames[i][index]==="日期") { //alert(window[arrayFunNames[i][index]](worksheet[cell_ref].v,strDate)); if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }else { var objStartDate = new Date(strStartDate); var objEndDate = new Date(strEndDate); var objTableDate = new Date(formatExcelDate(worksheet[cell_ref].v,"-")); if (objTableDate.getTime()objEndDate.getTime() ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ formatExcelDate(worksheet[cell_ref].v,"-") +",不在界面日期区间内!" + '\n'; } }; } else if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet }; // 检验 支援 excel文件 //generate balance data to json string from workbook function makeBalanceJSONstring(workbook){ var arraySheetNames = ["GRZY","JJZY"]; var arrayFunNames=[ ["文字","单元号","单元号","日期","住宿归类","数值","上传人","通过"], ["文字","单元号","单元号","日期","文字","文字","文字","数值","数值","数值","上传人","通过"] ]; var strB=""; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=i+2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate balance data to json string from workbook ///////////////////under this line start for invoice xlsx file ////////////////////////////////// // 检验 开票 excel文件 function checkInvoiceFile(workbook,logID,userID) { var arraySheetNames = ["KP"]; var arrayFunNames=[ ["通过","通过","通过","通过","文字","数值","数值","数值","文字","数值","数值","日期","结算模式","文字","文字","是否","项目号","通过","文字","上传人","通过"] ]; var stc = workbook.Sheets["KP"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["W"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["W"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; } else { // alert(index); if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else if(arrayFunNames[i][index]==="项目号"){ str2=""; var cell_ref2 = number2alphabet(C-1) + R; str2=null; if (worksheet[cell_ref2].v=== "是" ){ //worksheet[cell_ref].v = "见拆分"; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet };//// 检验 开票 excel文件 //generate invoice data to json string from workbook function makeInvoiceJSONstring(workbook){ var arraySheetNames = ["KP"]; var arrayFunNames=[ ["通过","通过","通过","通过","文字","数值","数值","数值","文字","数值","数值","日期","结算模式","文字","文字","是否","项目号","通过","文字","上传人","通过"] ]; var strB=""; var stc = workbook.Sheets["KP"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["W"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["W"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate invoice data to json string from workbook ///////////////////under this line start for invoice_split xlsx file ////////////////////////////////// // 检验 开票拆分 excel文件 function checkInvoiceSplitFile(workbook,logID,userID) { var arraySheetNames = ["KPCF"]; var arrayFunNames=[ ["通过","数值","项目号","通过","文字","上传人"] ]; var stc = workbook.Sheets["KPCF"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["H"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["H"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; } else { // alert(index); if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet };//// 检验 开票 excel文件 //generate invoice-split data to json string from workbook function makeInvoiceSplitJSONstring(workbook){ var arraySheetNames = ["KPCF"]; var arrayFunNames=[ ["通过","数值","项目号","通过","文字","上传人"] ]; var strB=""; var stc = workbook.Sheets["KPCF"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["H"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["H"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate invoice data to json string from workbook ///////////////////under this line start for salary xlsx file ////////////////////////////////// // 检验 工资 excel文件 function checkSalaryFile(workbook,logID,strYYYYMM,userID) { var arraySheetNames = ["CGZ","CQT","CJT"]; var arrayFunNames=[ ["单元号","年月","文字","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","通过","通过","数值","数值","上传人"], ["单元号","年月","数值","数值","数值","数值","通过","上传人"], ["单元号","年月","文字","文字","数值","通过","上传人"] ]; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=i+2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { if (arrayFunNames[i][index]==="年月") { //alert(window[arrayFunNames[i][index]](worksheet[cell_ref].v,strDate)); if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }else if (worksheet[cell_ref].v != strYYYYMM) { document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ worksheet[cell_ref].v +",不等于所选:" + strYYYYMM + '\n'; }; } else if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet }; // 检验 支援 excel文件 //generate salary data to json string from workbook function makeSalaryJSONstring(workbook){ var arraySheetNames = ["CGZ","CQT","CJT"]; var arrayFunNames=[ ["单元号","年月","文字","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","通过","通过","数值","数值","上传人"], ["单元号","年月","数值","数值","数值","数值","通过","上传人"], ["单元号","年月","文字","文字","数值","通过","上传人"] ]; var strB=""; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=i+2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate salary data to json string from workbook ///////////////////under this line start for cash_in xlsx file ////////////////////////////////// // 检验 到款 excel文件 function checkCashInFile(workbook,logID,strStartDate,strEndDate,userID) { var arraySheetNames = ["DK"]; var arrayFunNames=[ ["日期","数值","通过","项目号","文字","通过","上传人"] ]; var stc = workbook.Sheets["DK"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["I"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["I"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { // alert(index); if (arrayFunNames[i][index]==="日期") { //alert(window[arrayFunNames[i][index]](worksheet[cell_ref].v,strDate)); if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }else { var objStartDate = new Date(strStartDate); var objEndDate = new Date(strEndDate); var objTableDate = new Date(formatExcelDate(worksheet[cell_ref].v,"-")); if (objTableDate.getTime()objEndDate.getTime() ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ formatExcelDate(worksheet[cell_ref].v,"-") +",不在界面日期区间内!" + '\n'; } }; } else if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet }; // 检验 到款 excel文件 //generate cashin data to json string from workbook function makeCashInJSONstring(workbook){ var arraySheetNames = ["DK"]; var arrayFunNames=[ ["日期","数值","通过","项目号","文字","通过","上传人"] ]; var strB=""; var stc = workbook.Sheets["DK"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["I"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["I"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate cashin data to json string from workbook ///////////////////under this line start for cash_out xlsx file ////////////////////////////////// // 检验 付款 excel文件 function checkCashOutFile(workbook,logID,strStartDate,strEndDate,userID) { var arraySheetNames = ["FK"]; var arrayFunNames=[ ["日期","数值","通过","项目号","通过","上传人"] ]; var stc = workbook.Sheets["FK"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["H"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["H"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { // alert(index); if (arrayFunNames[i][index]==="日期") { //alert(window[arrayFunNames[i][index]](worksheet[cell_ref].v,strDate)); if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }else { var objStartDate = new Date(strStartDate); var objEndDate = new Date(strEndDate); var objTableDate = new Date(formatExcelDate(worksheet[cell_ref].v,"-")); if (objTableDate.getTime()objEndDate.getTime() ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ formatExcelDate(worksheet[cell_ref].v,"-") +",不在界面日期区间内!" + '\n'; } }; } else if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet }; // 检验 付款 excel文件 //generate cashout data to json string from workbook function makeCashOutJSONstring(workbook){ var arraySheetNames = ["FK"]; var arrayFunNames=[ ["日期","数值","通过","项目号","通过","上传人"] ]; var strB=""; var stc = workbook.Sheets["FK"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=1; if (stc["H"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["H"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate cashout data to json string from workbook ///////////////////under this line start for b14c xlsx file ////////////////////////////////// // 检验 B14C excel文件 function checkB14CFile(workbook,logID,userID) { var arraySheetNames = ["B14C"]; var arrayFunNames=[ ["日期","文字","文字","文字","单元号","项目号","交通归类","用车归类","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","通过","通过","文字","日期","通过","通过","通过","通过","通过","数值","通过","通过","通过","通过","通过","通过","数值","数值","数值","数值","通过","通过","日期","文字","上传人"] ]; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet }; // 检验 B14C excel文件 //generate b14c data to json string from workbook function makeB14CJSONstring(workbook){ var arraySheetNames = ["B14C"]; var arrayFunNames=[ ["日期","文字","文字","文字","单元号","项目号","交通归类","用车归类","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","通过","通过","文字","日期","通过","通过","通过","通过","通过","数值","通过","通过","通过","通过","通过","通过","数值","数值","数值","数值","通过","通过","日期","文字","上传人"] ]; var strB=""; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate b14c data to json string from workbook ///////////////////under this line start for b15c xlsx file ////////////////////////////////// // 检验 B15C excel文件 function checkB15CFile(workbook,logID,userID) { var arraySheetNames = ["B15C"]; var arrayFunNames=[ ["日期","单元号","项目号","文字","通过","通过","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","通过","文字","通过","文字","通过","通过","通过","通过","数值","数值","数值","数值","数值","通过","数值","数值","数值","通过","通过","通过","文字","通过","通过","通过","通过","通过","通过","上传人"] ]; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet }; // 检验 B15C excel文件 //generate b15c data to json string from workbook function makeB15CJSONstring(workbook){ var arraySheetNames = ["B15C"]; var arrayFunNames=[ ["日期","单元号","项目号","文字","通过","通过","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","数值","通过","文字","日期","文字","通过","通过","通过","通过","数值","数值","数值","数值","数值","通过","数值","数值","数值","通过","通过","日期","文字","通过","通过","通过","通过","通过","通过","上传人"] ]; var strB=""; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate b15c data to json string from workbook ///////////////////under this line start for b16-b19 xlsx file ////////////////////////////////// // 检验 b16-b19 excel文件 function checkB16toB19File(workbook,logID,userID) { var arraySheetNames = ["B16","B17","B18","B19"]; var arrayFunNames=[ ["通过","日期","文字","单元号","日期","文字","文字","文字","数值","文字","上传人"], ["通过","日期","文字","单元号","日期","文字","文字","数值","数值","文字","上传人"], ["通过","日期","文字","单元号","日期","文字","文字","文字","数值","文字","上传人"], ["通过","日期","文字","单元号","文字","数值","文字","上传人"] ]; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=i+2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; var index; for (var R = 2; R <= rows+1; ++R) {//loop row index = 0; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; //xlsx.full.min.js 里面没有Cell对象,要访问Cell值,只能通worksheet对象,可以从workbook object的内部结构看出来 //如果单元格为空,控制台会提示错误,运行停止,下面是解决办法! if (worksheet[cell_ref] === undefined) { document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + " 空值!" + '\n'; index++; // alert(index); } else { if (arrayFunNames[i][index]==="上传人") { if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") != true ){ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"','"+userID+"')") + '\n'; }; }else{ if (eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") != true ){ document.getElementById(logID).innerHTML +="表" + arraySheetNames[i] + "单元格" + cell_ref + eval(arrayFunNames[i][index]+"('"+worksheet[cell_ref].v+"')") + '\n'; }; }; index++; };//cell is not blank };//loop col };//loop row };// 只检查有数据行的sheet };//loop sheet }; // 检验 b16-b19 excel文件 //generate b16-b19 data to json string from workbook function makeB16toB19JSONstring(workbook){ var arraySheetNames = ["B16","B17","B18","B19"]; var arrayFunNames=[ ["通过","日期","文字","单元号","日期","文字","文字","文字","数值","文字","上传人"], ["通过","日期","文字","单元号","日期","文字","文字","数值","数值","文字","上传人"], ["通过","日期","文字","单元号","日期","文字","文字","文字","数值","文字","上传人"], ["通过","日期","文字","单元号","文字","数值","文字","上传人"] ]; var strB=""; var stc = workbook.Sheets["C"]; for (let i = 0; i < arraySheetNames.length; i++) {//loop sheet var stid=i+2; if (stc["C"+stid].v > 0 ) {// 只检查有数据行的sheet //strB +=","+ arraySheetNames[i] +":["; strB += '\"'+arraySheetNames[i]+'\"' +":\"["; var worksheet = workbook.Sheets[arraySheetNames[i]]; // 这里我们只读取每个sheet //var strRange = worksheet['!ref'];// 取已使用区域,格式为:A1:U3,包含很多空的行,不能使用这个方式了,从C表中,取真实的数据行数 var rows = stc["C"+stid].v var cell_ref; for (var R = 2; R <= rows+1; ++R) {//loop row if (R===2) { strB +="["; }else{ strB +="▓["; }; for (var C = 2; C <= arrayFunNames[i].length+1; ++C) {//loop col str2=""; cell_ref = number2alphabet(C) + R; str2=null; if (C===(arrayFunNames[i].length+1)) { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") ; }else{ strB += worksheet[cell_ref].v; }; } else { if (arrayFunNames[i][C-2]==="日期") { strB += formatExcelDate(worksheet[cell_ref].v,"-") + "∮"; }else{ strB += worksheet[cell_ref].v + "∮"; }; }; };//loop col strB +="]"; };//loop row strB +="]\","; };// 只检查有数据行的sheet };//loop sheet return "{"+strB+"}"; };//generate b16-b19 data to json string from workbook /* export{import_excel_to_json,readWorkbookFromLocalFile,SheetAmount,HaveSheets,HaveData3Para,readWorkbook,makeJSONstring} export{HaveSingleSheetName,makeIncomeJSONstring,checkIncomeFile} export{ checkBalanceFile,makeBalanceJSONstring } export{ makeInvoiceJSONstring,checkInvoiceFile } export{ checkInvoiceSplitFile,makeInvoiceSplitJSONstring } export { checkSalaryFile,makeSalaryJSONstring } export { checkCashInFile,makeCashInJSONstring } export { checkCashOutFile,makeCashOutJSONstring } export { checkB14CFile,makeB14CJSONstring } export { checkB15CFile,makeB15CJSONstring } export { checkB16toB19File,makeB16toB19JSONstring } */