ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-02-25 09:39:50  阅读:626  来源: 互联网

标签:读取 JavaScript excel workbook json html key var csv


下载SheetJS文件

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

下载之后打开其中的dist文件目录,能看到其中有xlsx.core.min.js和xlsx.full.min.js两个JS文件,使用其中一个文件就行,一般情况下使用xlsx.core.min.js就可以了。
在这里插入图片描述
此处以xlsx.core.min.js为例

具体用法如下:

1.首先在HTML中定义如下

<input type="file" id="inputfilename">	<!--选择文件的input-->

<button onclick="readWorkbookFromLocalFile()">读取Excel表格</button> <!--读取文件的按钮-->

<div id="result"></div> <!--显示所读取excel的区域-->

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

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

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

小敏同学 发布了1 篇原创文章 · 获赞 0 · 访问量 23 私信 关注

标签:读取,JavaScript,excel,workbook,json,html,key,var,csv
来源: https://blog.csdn.net/girl_Xiaomin/article/details/104490049

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有