|
@@ -0,0 +1,1894 @@
|
|
|
+ //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';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ // 检验日报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]==="项目号") {
|
|
|
+ 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 != projectID) {
|
|
|
+ document.getElementById(logID).innerHTML += "表" + arraySheetNames[i] + "单元格" + cell_ref + "所填:"+ worksheet[cell_ref].v +",不等于所选:" + projectID + '\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 reg=/(新址|共址|维护|微站)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:新址|共址|维护|微站 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 站归类B2(str) {
|
|
|
+ var reg=/(新址|共址|维护|微站|存满|软扩)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:新址|共址|维护|微站|存满|软扩 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 区域归类(str) {
|
|
|
+ var reg=/(城区|非城区)/;
|
|
|
+ if(!reg.test(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 受阻归类(str) {
|
|
|
+ var reg=/(成功|部分|失败)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:成功|部分|失败 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 段归类(str) {
|
|
|
+ var reg=/(新建管道|干线|城域|家集客)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:新建管道|干线|城域|家集客 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 数值(str) {
|
|
|
+ if (!myIsNaN(str)){
|
|
|
+ return "所填:"+ str +",不是数值!";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+ function 室分归类B7(str) {
|
|
|
+ var reg=/(信源改造|传统分布|新型分布)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:信源改造|传统分布|新型分布 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 室分归类B8(str) {
|
|
|
+ var reg=/(传统分布|新型分布)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:传统分布|新型分布 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 室分归类B9(str) {
|
|
|
+ var reg=/(仅信源)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是:仅信源 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 交通归类(str) {
|
|
|
+ var reg=/(租公司车|租个人车|打车|网约车|公交地铁|步行|他方出车|按出图包干)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:租公司车|租个人车|打车|网约车|公交地铁|步行|他方出车|按出图包干 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 用车归类(str) {
|
|
|
+ var reg=/(普通车|越野车|其他)/;
|
|
|
+ if(!reg.test(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+2)) {
|
|
|
+ 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 reg=/(是|否)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:是|否 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 收入凭证(str) {
|
|
|
+ var reg=/(无|邮件|聊天截图|签证图片|其他)/;
|
|
|
+ if(!reg.test(str)){
|
|
|
+ return "所填:"+ str +",不是其一:无|邮件|聊天截图|签证图片|其他 !";
|
|
|
+ }else{
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ function 结算模式(str) {
|
|
|
+ var reg=/(比例|计件|人天|比例计件|比例人天|计件人天|比例计件人天)/;
|
|
|
+ if(!reg.test(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 reg=/(宾馆|宿舍)/;
|
|
|
+ if(!reg.test(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()<objStartDate.getTime() || 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 //////////////////////////////////
|
|
|
+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 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()<objStartDate.getTime() || 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()<objStartDate.getTime() || 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 }
|
|
|
+ */
|