实现Excel转换为json并和本地数据对比

实现这样一个需求,将Excel中的数据和管理系统中的数据进行对比,找出错误数据,通过postman请求后导出json文件,转换成js后引入到html中,通过监听对象属性的变化判断excel转json成功,将本地的数据和excel转换后的数据对比,打印出相同的数据。


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
    <script src="node_modules/xlsx/dist/xlsx.full.min.js">script>
head>
<body>
<input type="file" onchange="change(this)"/>


<script src="./response.js">script>
<script>
   let test = {
      content:''}
   Object.defineProperty(test,'content',{
      
   		set(value){
      
   			// 找出总名称相同的数据
   			let data = test1.filter(item=>{
      
   				return value.some(cell=>{
      
   					return item.materialName==cell.materialName
   				})
   			})
   			console.log('data===',data)
   		}
   })


    function change(obj) {
      
        if (!obj.files) {
      
            return;
        }
        let f = obj.files[0];
        let reader = new FileReader();
        reader.onload = function (e) {
      
            let data = e.target.result;
            let wb = XLSX.read(btoa(fixdata(data)), {
      
                type: 'base64'
            });

            let xlsxData = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
            let list1 = getList1(wb);
            xlsxData = AddXlsxData(xlsxData, list1);
            test.content = AddXlsxData(xlsxData, list1);
        };
        reader.readAsArrayBuffer(f);
    }

    function fixdata(data) {
       //文件流转BinaryString
        let o = "",
            l = 0,
            w = 10240;
        for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
        o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
        return o;
    }

    // 获取excel第一行的内容
    function getList1(wb) {
      
        let wbData = wb.Sheets[wb.SheetNames[0]]; // 读取的excel单元格内容
        let re = /^[A-Z]1$/; // 匹配excel第一行的内容
        let arr1 = [];
        for (let key in wbData) {
       // excel第一行内容赋值给数组
            if (wbData.hasOwnProperty(key)) {
      
                if (re.test(key)) {
      
                    arr1.push(wbData[key].h);
                }
            }
        }
        return arr1;
    }

    // 增加对应字段空白内容
    function AddXlsxData(xlsxData, list1) {
      
        let addData = null; // 空白字段替换值
        for (let i = 0; i < xlsxData.length; i++) {
       // 要被JSON的数组
            for (let j = 0; j < list1.length; j++) {
       // excel第一行内容
                if (!xlsxData[i][list1[j]]) {
      
                    xlsxData[i][list1[j]] = addData;
                }
            }
        }
        return xlsxData;
    }
script>
body>
html>

你可能感兴趣的:(实现Excel转换为json并和本地数据对比)