使用JavaScript实现纯前端读取excel文件并与后台进行交互

下载SheetJS文件

GitHub下载地址:https://github.com/SheetJS/sheetjs

下载之后打开其中的dist文件目录,能看到其中有xlsx.core.min.js和xlsx.full.min.js两个JS文件,使用其中一个文件就行,一般情况下使用xlsx.core.min.js就可以了。
使用JavaScript实现纯前端读取excel文件并与后台进行交互_第1张图片
此处以xlsx.core.min.js为例

具体用法如下:

1.首先在HTML中定义如下

<input type="file" id="inputfilename">	

<button onclick="readWorkbookFromLocalFile()">读取Excel表格button> 

<div id="result">div> 

2. 引入JS

<script src="../../js/xlsx.core.min.js">script>

3. 使用XLSX.read方法读取本地excel文件

 function readWorkbookFromLocalFile() {
        var file = document.getElementById('inputfilename').files[0];
        if (file) {
          var reader = new FileReader();

          reader.onload = function (e) {
            var data = e.target.result;
            var workbook = XLSX.read(data, { //XLSX.read()方法会返回一个workbook 对象
              type: 'binary'
            });
            readWorkbook(workbook);
          };
          reader.readAsBinaryString(file);

        } else {
          alert('请先选择文件');
        }
      }

4. 得到exce文件的csv和json格式

得到csv格式是为了在网页中显示读取到的表格
得到json格式是为了与后台进行数据交互

var json = null;
var csv = '';

 function readWorkbook(workbook) {
 
   var sheetNames = workbook.SheetNames; // 工作表名称集合
   var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet的内容

   csv = XLSX.utils.sheet_to_csv(worksheet); //这里便可以得到csv格式
   document.getElementById('result').innerHTML = csv2table(csv);  //使用csv2table()函数将其转换为简单的HTML表格,csv2table()函数定义在下一个代码块中

   json = XLSX.utils.sheet_to_json(worksheet); 
   // 成功转换为json格式后,可能表格中的中文属性名并不是后台所需要的字段名
   // 那么,就可以使用如下方法,遍历这个json对象,然后对其中的字段名进行修改
   for (var i in json) {
     for (var key in json[i]) {
       if (key == '年龄') {
         json[i]['age'] = json[i][key] //修改属性名为“age”
         delete json[i]['年龄'] //删除“年龄”
         } else if (key == '性别') {
         if (json[i][key] == '男') {
           json[i][key] = '1';
         } else {
           json[i][key] = '0';
         }
         json[i]['sex'] = json[i][key] //修改属性名为“sex”
         delete json[i]['性别'] //删除“性别”
       } else if (key == '姓名') {
         json[i]['username'] = json[i][key] //修改属性名为“username”
         delete json[i]['姓名'] //删除“姓名”
       } else if (key == '工号') {
         json[i]['workId'] = json[i][key] + ''; //修改属性名为“workId”
         delete json[i]['工号'] //删除“工号”
       }
     }
   }
 }

5. 将csv转换成简单的表格,会忽略单元格合并,在第一行和第一列追加类似excel的索引

function csv2table(csv) {
 var html = '';var rows = csv.split('\n');
 rows.pop();// 最后一行没用的
 rows.forEach(function(row, idx){var columns = row.split(',');
   columns.unshift(idx +1);// 添加行索引if(idx ==0){// 添加列索引
     html +='';for(var i =0; i < columns.length; i++){
       html +='';}
     html +='';}
   html +='';
   columns.forEach(function(column){
     html +='';});
   html +='';});
 html +='
' + (i == 0 ? '' : String.fromCharCode(65 + i - 1)) + '
' + column + '
'
; return html; }

到这里就能够实现通过SheetJS在页面中显示从本地读取到的excel文件了,也能够拿到想要与后台进行交互时的标准json数据格式,最后只需要发送Ajax与后台进行交互就OK拉!

参考文档 https://www.cnblogs.com/liuxianan/p/js-excel.html

你可能感兴趣的:(使用JavaScript实现纯前端读取excel文件并与后台进行交互)