SheetJS 入门案例
js插件下载地址:
https://github.com/SheetJS/js-xlsx
https://github.com/SheetJS/js-xls
<!doctype html>
<html>
<head>
<title>EXCEL转JSON</title>
<meta charset="UTF-8" />
<script type="text/javascript" src="http://mat1.gtimg.com/www/asset/lib/jquery/jquery/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="/xls/js/xls.js"></script>
<script type="text/javascript" src="/xls/js/jszip.js"></script>
<script type="text/javascript" src="/xls/js/xlsx.js"></script>
</head>
<body>
<div>
<input type='file' onchange='readFile(event)'>
</div>
<div>
<textarea id='debug' rows="50" cols="200"></textarea>
</div>
</body>
<script>
var excel = new Object();
var sheet = new Object();
var row = new Object();
var cell = new Object();
var x ;
var wb;
var output;
var filename;
var rows_a,rows_b;
var cols_a,cols_b;
var range = new Object();
var readFile = function(event) {
var read = new FileReader();
var file = event.target.files[0];
read.readAsBinaryString(file);
filename = file.name;
read.onload = function (event){
var res = event.currentTarget.result;
var fileType = getFileType(filename).toString();
switch (fileType){
case '.xls':
x = XLS;
break;
case '.xlsx':
x = XLSX;
break;
default:
x = null;
}
if(x){
wb = x.read(res, { type: 'binary' });
excel = getEXCEL(wb);
output = excel;
}else{
var info = {error:'can not resolve file end with :'+fileType};
output = getOutput(info,'obj');
}
console.log(output);
out_json = getOutput(output,'json');
$('#debug').val(out_json);
};
};
function getEXCEL(wb){
var Sheetnames = wb.SheetNames;
var Sheets = new Object();
var Sheet = new Object();
Sheets = wb.Sheets;
excel['sheetSize'] = Sheetnames.length.toString();
excel['excelName'] = filename;
excel["sheets"] = [];
for(var i=0;i<Sheetnames.length;i++){
Sheet = Sheets[Sheetnames[i]];
range = getRanger(Sheet['!ref']);
rows_a = range.row;
cols_a = range.col;
var m = 0;
sheet = new Object();
sheet['rowSize'] = rows_a.toString();
sheet['colSize'] = cols_a.toString();
sheet['sheetName'] = Sheetnames[i];
sheet["rows"] = [];
sheet["title"] = new Object();
for(var j=0;j<rows_a;j++){
row = new Object();
row['cells'] = [];
for(var m=0;m<cols_a;m++){
cell = new Object();
row['cells'].push(cell);
}
sheet["rows"].push(row);
}
for(k in Sheet){
if(isCell(k)){
range = getRanger(k);
rows_b = range.row.toString();
cols_b = range.col.toString();
row = sheet["rows"][rows_b-1];
row.val = null;
row.val = 'true';
cell = row['cells'][cols_b-1];
cell.value = null;
cell.value = Sheet[k].w;
}
}
for(t in sheet["rows"]){
var tit = sheet["rows"][t];
if(tit.val){
sheet["title"] = sheet["rows"][t];
break;
}
}
excel["sheets"].push(sheet);
}
return excel;
}
function isCell(str){
var reg = /^[a-zA-Z]+[0-9]+$/;
return reg.test(str);
}
function getRowNumber(key){
var reg = /[0-9]+$/;
var rownumber = reg.exec(key);
return rownumber;
}
function getColLetter(key){
var reg = /^[a-zA-Z]+/;
var colletter = reg.exec(key);
return colletter;
}
function getColNumber(key){
var reg = /[a-zA-Z]+/;
var colletter = reg.exec(key);
return colletter;
}
function getOutput(obj,type){
switch (type){
case 'json' :
return JSON.stringify(obj);
break;
case 'obj' :
return obj;
break;
default :
return JSON.stringify(obj);
}
}
function getRanger(ref){
if(ref == undefined){
range.row = "0";
range.col = "0";
}else{
var reg = /:[a-zA-Z]+[0-9]+/;
var reg2 = /^[a-zA-Z]+[0-9]+$/;
var pos = reg.exec(ref);
if(pos == undefined ){
pos = reg2.exec(ref);
}
var r = getRowNumber(pos).toString();
var codes = [];
var n;
var letter = getColNumber(pos).toString();
letter = letter.toLocaleLowerCase();
n = 0;
for(i in letter){
var code = letter[i].charCodeAt()-96;
codes[i] = code;
n++;
}
n--;
var mathstr = 0;
for(j in codes){
mathstr = 'Math.pow(26,'+n+')*'+codes[j] + '+'+ mathstr;
n--;
}
var c = eval(mathstr).toString();
range.row = r;
range.col = c;
}
return range;
}
function getFileType(filepath){
var reg = /.[a-zA-Z0-9]+$/;
var filePostfix = reg.exec(filepath);
return filePostfix;
}
</script>
</html>

浙公网安备 33010602011771号