利用JavaScript实现前端Excel的导入与导出--sheetjs

在项目开发过程中,偶尔会遇到Excel导入与导出的需求。在以前基本上由后台实现。无论是java还是.net都有相应的第三方组件供我们使用。最近在网上看到了可以利用js来实现。也不失为一种简单的方案。


SheetJS

今天的主角是sheetjs,官网地址:http://sheetjs.com。github地址:https://github.com/sheetjs/js-xlsx

个人感觉功能比较强大,支持多sheet页,能在excel和html、json、text等好多种格式之间相互转换(如下图)

另外兼容性也比较好,可以放心使用:

以前没接触的朋友,可以直接看官网的Demo,比较直观。比较着急使用的朋友,可以直接百度下,有现成的代码示例,比如:

https://blog.csdn.net/marko_zheng/article/details/79454756

https://www.jianshu.com/p/74d405940305


在项目中的应用

导出功能

这次需求比较简单,仅仅是将网页上的一个表格导出到excel,代码也简单:

    var elt = document.getElementById('tableContractsExcel');
    var wb = XLSX.utils.table_to_book(elt, {sheet:"合同列表"});
    return XLSX.writeFile(wb, '合同列表.xlsx');

tableContractsExcel为页面上<table>标签的id

导入功能

流程:

1、选择需要导入的excel

2、利用sheetjs读取excel转化为json,然后以表格的形式展示到页面上。

3、点击导入按钮,遍历json数据,以ajax形式逐条提交到后台(效率考虑的话,也可以批量,比如一个ajax请求提交10条数据),后台完成检验与保存。可以看出,这部分与日常开发类似,已经与sheetjs无关了。

为方便理解,截个图:

主要代码:

<script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script>
<input type="file" onchange="readData(this)">
  
  function readData(obj) {
        if (!obj.files) {
            return;
        }
        var f = obj.files[0];
        var reader = new FileReader();
        reader.onload = function (e) {
            var data = e.target.result;
            if (rABS) {
                wb = XLSX.read(btoa(fixdata(data)), {
                    type: 'base64'
                });
            } else {
                wb = XLSX.read(data, {
                    type: 'binary'
                });
            }
            
            var questions = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);//读取数据
            $scope.convertQuestion(questions);//后续的数据格式处理,方便展示,与导入无关

        };
        if (rABS) {
            reader.readAsArrayBuffer(f);
        } else {
            reader.readAsBinaryString(f);
        }
    }

 

总结

用这种方式做导入,可以实时将导入过程展现给用户,导入结果可以显示到最后一列(见上图)。

而且后台也不用关心excel读取写入,当作正常的表单数据处理即可。

但数据量不能太大。

 

 

 

 

 

 

好的,以下是一个利用 js-xlsx 实现 Excel 文件导入导出功能的示例: 首先在 HTML 文件中引入 js-xlsx 库: ```html <script src="https://cdn.jsdelivr.net/npm/xlsx/dist/xlsx.full.min.js"></script> ``` 然后在 JavaScript 文件中编写以下代码: ```javascript // 导出 Excel 文件 function exportExcel(data, filename) { const ws = XLSX.utils.json_to_sheet(data); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); XLSX.writeFile(wb, `${filename}.xlsx`); } // 导入 Excel 文件 function importExcel(file, callback) { const reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = (e) => { const data = new Uint8Array(e.target.result); const workbook = XLSX.read(data, { type: 'array' }); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; const result = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); callback(result); }; } ``` 其中,exportExcel 函数用于将数据导出Excel 文件,参数 data 为要导出的数据,filename 为导出的文件名。 importExcel 函数用于导入 Excel 文件,参数 file 为要导入的文件,callback 为导入成功后的回调函数,回调函数的参数 result 为导入的数据。 示例代码中使用了 FileReader 对象读取文件内容,然后使用 js-xlsx 库解析 Excel 文件并将数据转化为 JSON 格式。 使用示例: ```javascript const data = [ { name: '张三', age: 20, gender: '男' }, { name: '李四', age: 22, gender: '女' }, { name: '王五', age: 25, gender: '男' }, ]; exportExcel(data, 'test'); // 导出 Excel 文件,文件名为 test.xlsx const inputElement = document.getElementById('input-file'); inputElement.addEventListener('change', (e) => { const file = e.target.files[0]; importExcel(file, (result) => { console.log(result); // 输出导入的数据 }); }); ``` 在 HTML 文件中添加一个文件选择框: ```html <input type="file" id="input-file"> ``` 用户选择一个 Excel 文件后,调用 importExcel 函数导入数据,并在回调函数中处理导入的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值