純JS實(shí)現(xiàn)的讀取excel文件內(nèi)容功能示例【支持所有瀏覽器】
本文實(shí)例講述了純JS實(shí)現(xiàn)的讀取excel文件內(nèi)容功能。分享給大家供大家參考,具體如下:
template.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JS-XLSX Live Demo</title>
<link href="../css/bootstrap.min.css" rel="external nofollow" rel="stylesheet">
<style>
#drop{
border:2px dashed #bbb;
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
padding:25px;
text-align:center;
font:20pt bold,"Vollkorn";color:#bbb
}
#b64data{
width:100%;
}
a { text-decoration: none }
button{}
</style>
</head>
<body>
<pre>
<input type="file" name="xlfile" id="xlf">
<button type="button" class="btn btn-danger"><a href="Techrecord.html" rel="external nofollow" rel="external nofollow" >返回</a></button>
<input type="checkbox" name="useworker" checked="" style="display: none;">
<input type="checkbox" name="xferable" checked="" style="display: none;">
<input type="checkbox" name="userabs" checked="" style="display: none;">
</pre>
<button class="submit_all">提交</button>
<pre id="out"></pre>
<br>
<script src="../js/jquery.js"></script>
<script src="../js/common.js"></script>//這里主要封裝了一下方法,可以忽略,主要使用到以下幾個(gè)js
<script type="text/javascript" async="" src="http://www.google-analytics.com/ga.js"></script>
<script src="../js/shim.js"></script>
<script src="../js/xlsx.full.min.js"></script>
<script src='../js/myexcel.js'></script>
</body>
</html>
myexcel.js
/*jshint browser:true */
/*global XLSX */
var X = XLSX;
var XW = {
/* worker message */
msg: 'xlsx',
/* worker scripts */
rABS: '../js/xlsxworker2.js',
norABS: '../js/xlsxworker1.js',
noxfer: '../js/xlsxworker.js'
};
function ab2str(data) {
var o = "", l = 0, w = 10240;
for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w)));
o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w)));
return o;
}
function s2ab(s) {
var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b);
for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i);
return [v, b];
}
function xw_xfer(data, cb) {
var worker = new Worker(rABS ? XW.rABS : XW.norABS);
worker.onmessage = function(e) {
switch(e.data.t) {
case 'ready': break;
case 'e': console.error(e.data.d); break;
default: xx=ab2str(e.data).replace(/\n/g,"\\n").replace(/\r/g,"\\r");cb(JSON.parse(xx)); break;
}
};
if(rABS) {
var val = s2ab(data);
worker.postMessage(val[1], [val[1]]);
} else {
worker.postMessage(data, [data]);
}
}
function xw(data, cb) {
transferable = document.getElementsByName("xferable")[0].checked;
if(transferable) xw_xfer(data, cb);
else xw_noxfer(data, cb);
}
function get_radio_value( radioName ) {
var radios = document.getElementsByName( radioName );
for( var i = 0; i < radios.length; i++ ) {
if( radios[i].checked || radios.length === 1 ) {
return radios[i].value;
}
}
}
function to_json(workbook) {
var result = {};
workbook.SheetNames.forEach(function(sheetName) {
var roa = X.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
if(roa.length > 0){
result[sheetName] = roa;
}
});
return result;
}
var tarea = document.getElementById('b64data');
function b64it() {
if(typeof console !== 'undefined') console.log("onload", new Date());
var wb = X.read(tarea.value, {type: 'base64',WTF:wtf_mode});
process_wb(wb);
}
var token=Cookies.get("token");
console.log(token);
if(token==null){
// alert("你是怎么進(jìn)來(lái)的?請(qǐng)先登錄");
// window.location.href="../login.html" rel="external nofollow" ;
}
var global_wb;
function process_wb(wb) {
global_wb = wb;
var output = "";
//這里是成績(jī)批量錄入代碼,可以忽略不計(jì)
$(".submit_all").on("click",function(){
var array=Object.values(to_json(wb))[0];
var len=array.length;
var array1="",array2="",array3="",array4="",array5="";
for(var i=0;i<len;i++){
array1+=array[i].學(xué)號(hào)+",";
array2+=array[i].成績(jī)+",";
array3+=array[i].總分+",";
array4+=array[i].時(shí)間+",";
array5+=array[i].評(píng)語(yǔ)+",";
}
array1=array1.substring(0,array1.length-1);
array2=array2.substring(0,array2.length-1);
array3=array3.substring(0,array3.length-1);
array4=array4.substring(0,array4.length-1);
array5=array5.substring(0,array5.length-1);
console.log(array1);
var url='grade/addall';
var params={
"token":token,
"gradeUserId":array1,
"gradeCourse":array2,
"gradeRank":array3,
"gradeRemark":array5,
"gradeTime":array4
};
pullData(url,params,function(res){
if(res.state==0){
alert("成績(jī)錄入成功!");
window.location.href="Techrecord.html" rel="external nofollow" rel="external nofollow" ;
}
else if(res.state==1){
alert("您輸入的學(xué)號(hào)不存在");
}
});
})
output = JSON.stringify(to_json(wb), 2, 2);
if(out.innerText === undefined) out.textContent = output;
else out.innerText = output;
if(typeof console !== 'undefined') console.log(output);
}
function setfmt() {if(global_wb) process_wb(global_wb);}
var xlf = document.getElementById('xlf');
function handleFile(e) {
rABS = document.getElementsByName("userabs")[0].checked;
use_worker = document.getElementsByName("useworker")[0].checked;
var files = e.target.files;
var f = files[0];
{
var reader = new FileReader();
var name = f.name;
reader.onload = function(e) {
if(typeof console !== 'undefined')
var data = e.target.result;
if(use_worker) {
xw(data, process_wb);
} else {
var wb;
if(rABS) {
wb = X.read(data, {type: 'binary'});
} else {
var arr = fixdata(data);
wb = X.read(btoa(arr), {type: 'base64'});
}
process_wb(wb);
}
};
if(rABS) reader.readAsBinaryString(f);
else reader.readAsArrayBuffer(f);
}
}
if(xlf.addEventListener) xlf.addEventListener('change', handleFile, false);
導(dǎo)入一個(gè)新建的excel

查看讀取到的值,以json格式顯示

給大家一個(gè)GitHub插件包下載地址: https://github.com/SheetJS/js-xlsx
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript文件與目錄操作技巧匯總》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
BootStrap使用file-input插件上傳圖片的方法
這篇文章主要介紹了BootStrap使用file-input插件上傳圖片的方法,bootstrap的圖片上傳框架 file-input 插件非常不錯(cuò),下面小編通過(guò)本文介紹下這個(gè)插件的使用方法,感興趣的朋友一起看看吧2016-09-09
Extjs 中的 Treepanel 實(shí)現(xiàn)菜單級(jí)聯(lián)選中效果及實(shí)例代碼
這篇文章主要介紹了Extjs 中 Treepanel 實(shí)現(xiàn)菜單級(jí)聯(lián)選中效果,需要的朋友可以參考下2017-08-08
javascript parseInt() 函數(shù)的進(jìn)制轉(zhuǎn)換注意細(xì)節(jié)
parseInt(string, radix) 有2個(gè)參數(shù),第一個(gè)string 是傳入的數(shù)值,第二個(gè)radix是 傳入數(shù)值的進(jìn)制,參數(shù)radix 可以忽略,默認(rèn)為 10,各種進(jìn)制的數(shù)轉(zhuǎn)換為 十進(jìn)制整數(shù),接下來(lái)詳細(xì)介紹,感興趣的朋友可以了解下哦2013-01-01
JavaScript操作選擇對(duì)象的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇JavaScript操作選擇對(duì)象的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2016-05-05
Bootstrap登陸注冊(cè)頁(yè)面開(kāi)發(fā)教程
這篇文章主要介紹了Bootstrap登陸注冊(cè)頁(yè)面開(kāi)發(fā)教程,感興趣的小伙伴們可以參考一下2016-07-07
JavaScript實(shí)現(xiàn)的購(gòu)物車效果可以運(yùn)用在好多地方
JavaScript實(shí)現(xiàn)的購(gòu)物車效果,當(dāng)然這個(gè)效果可以運(yùn)用在好多地方,比如好友的選擇,人力資源模塊等等,需要的朋友可以參考下2014-05-05
基于Bootstrap table組件實(shí)現(xiàn)多層表頭的實(shí)例代碼
Bootstrap table還有一個(gè)很多強(qiáng)大的功能,下面就通過(guò)本文給大家分享基于Bootstrap table組件實(shí)現(xiàn)多層表頭的實(shí)例代碼,需要的朋友參考下吧2017-09-09

