代码如下:
<!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文件格式如下:
查询结果如下: