【无标题】项目上遇到的,给了一个.xlsx格式的文件,需要找出里面的批量地址对应的经纬度,所以写了一个HTML,只需要将文件上传,就能返回出包含经纬度的json数据

 代码如下:

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title></title>
</head>
<body>
<input type="file" onchange="importf(this)"/>
<textarea id="demo"></textarea>
<script src="https://cdn.bootcdn.net/ajax/libs/xlsx/0.16.9/xlsx.full.min.js"></script>
<script src="https://cdnjs.loli.net/ajax/libs/jquery/3.2.1/jquery.min.js"></script>


<script>

   var wb;//读取完成的数据
   var rABS = true; //是否将文件读取为二进制字符串
   // var replacer = null;
   function replacer(key, value) {
       return value;
   }


   function importf(obj) {//导入
       if (!obj.files) {
           return;
       }
       var f = obj.files[0];
       var reader = new FileReader();
       reader.onload = function (e) {
           var data = e.target.result;
           // console.log(data);
           if (rABS) {
               wb = XLSX.read(btoa(fixdata(data)), {//手动转化
                   type: 'base64'
               });
           } else {
               wb = XLSX.read(data, {
                   type: 'binary'
               });
           }
           var xlsxData = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
           var list1 = getList1(wb);
           xlsxData = AddXlsxData(xlsxData, list1);
           //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
           //wb.Sheets[Sheet名]获取第一个Sheet的数据
           // var dataJson = JSON.stringify(xlsxData, replacer, '\t');
           var data = JSON.stringify(xlsxData, replacer, '\t');
           var dataJson = JSON.parse(data)

           function toLocation(list){
            let n = list.length
            locationList(0)

            function locationList(i){
                // console.log(i)
                if(i<n) {
                    $.ajax
                        ({
                            url: "https://restapi.amap.com/v3/geocode/geo",
                            dataType: "json",
                            type: "get",
                            data: {
                                address: list[i].orgName, // 替换二: 可根据excelbiao格列名情况更换为其他值
                                city: "北京市", // 替换三: 可根据情况更换为其他值            
                                key: "*************" // 替换四: 自己的高德地图API key值
                            },
                            success:function(res){
                                   if(res && res.geocodes[0] && res.geocodes[0].location) {
                                        let data = res.geocodes[0].location
                                        list[i].location = data // 把获取到的经纬度location的值写进json文件里
                                        locationList(i+1)
                                   } else {
                                    console.log(i)
                                        let data = 'null'
                                        list[i].location = data // 把获取到的经纬度location的值写进json文件里
                                        locationList(i+1)

                                   }


                            },
                            error:function(){
                                alert("failed!");
                            },
                        });
                }
                if(i === n){
                    document.getElementById("demo").innerHTML = JSON.stringify(list)
                }

            }

        }
            toLocation(dataJson)
       };
       if (rABS) {
           reader.readAsArrayBuffer(f);
       } else {
           reader.readAsBinaryString(f);
       }
   }

   function fixdata(data) { //文件流转BinaryString
       var 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) {
       var wbData = wb.Sheets[wb.SheetNames[0]]; // 读取的excel单元格内容
       var re = /^[A-Z]1$/; // 匹配excel第一行的内容
       var arr1 = [];
       for (var key in wbData) { // excel第一行内容赋值给数组
           if (wbData.hasOwnProperty(key)) {
               if (re.test(key)) {
                   arr1.push(wbData[key].h);
               }
           }
       }
       return arr1;
   }

   // 增加对应字段空白内容
   function AddXlsxData(xlsxData, list1) {
       var 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>

.xlsx文件格式如下:

 查询结果如下:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值