利用js-xlsx解析文件(excel)

安装

//CDN
<script src="https://cdn.bootcdn.net/ajax/libs/xlsx/0.18.5/xlsx.core.min.js"></script>
//npm
npm install xlsx

使用




    let uploadDivStr = `<div id="UploadTableDiv" style=" height:330px;"><div class="layui-btn-container"> <button type="button" class="layui-btn layui-btn-normal layui-btn-sm" id="ID-upload-demo-files">选择文件</button>
    <button type="button" class="layui-btn layui-btn-sm" id="ID-upload-demo-files-action">开始上传</button><button type="button" class="layui-btn layui-btn-sm" ><a href="${layui.laytpl.href}" style="color:white">下载模板</a></button>
    
        <input type="file" id="file" style="display:none;"accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /></div>
        
                    <table class="layui-table" id="UploadTable-demo" contenteditable></table>
              </div>   
        `

    let uploadDiv = document.createElement('div');
    //业务要求是需要弹出的,所以先隐藏
    uploadDiv.setAttribute('style', 'display:none;padding:15px 10px 0 10px;');
    uploadDiv.setAttribute('id', 'uploadDiv')
    uploadDiv.innerHTML = uploadDivStr;

    document.body.appendChild(uploadDiv);

    //为按钮添加点击事件
    document.getElementById('ID-upload-demo-files').addEventListener('click', function (e) {    
        //触发ipunt的点击事件
        document.getElementById('file').click();


    })


    document.getElementById('file').addEventListener('change', function (e) {
        //读取上传的excel文件
        var files = e.target.files;
        if (files.length == 0) return;
        var f = files[0];
        //验证格式
        if (!/\.xlsx$/g.test(f.name)) {
            alert('仅支持读取xlsx格式!');
            return;
        }
        readWorkbookFromLocalFile(f, function (workbook) {
            readWorkbook(workbook);
        });
    });

    // 读取本地excel文件
    function readWorkbookFromLocalFile(file, callback) {
        //创建实例
        var reader = new FileReader();
        reader.onload = function (e) {
            var data = e.target.result;
            //这里type的类型要与处理文件时读的data一致,可以更改
            var workbook = XLSX.read(data, { type: 'binary' });
            if (callback) callback(workbook);
        };
        reader.readAsBinaryString(file);
    }
    
    //读取出excel中的数据
    function readWorkbook(workbook) {
        var sheetNames = workbook.SheetNames; // 工作表名称集合
        var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet
        //获取json格式的数据
        var json = XLSX.utils.sheet_to_json(worksheet);
        //获取csv格式的数据
        var csv = XLSX.utils.sheet_to_csv(worksheet);
        //document.getElementById('result').innerHTML = csv2table(csv, json);
        
        //根据获取的数据去生成想要的表格
        csv2table(csv, json);
    }

        // 将csv转换成普通表格的html
    // function csv2table(csv) {
    //     var html = '<table class="layui-table" id="uploadTable">';
    //     var rows = csv.split('\n');
    //     // rows.pop(); // 最后一行没用的
    //     for (let key in rows) {
    //         let columns = rows[key].split(',');
    //         if (key == 0) {
    //             html += '<tr>'
    //             columns.forEach(function (column) {
    //                 html += '<th>' + column + '</th>';
    //             });
    //             html += '</tr>'
    //         } else {
    //             html += '<tr>'
    //             columns.forEach(function (column) {
    //                 html += '<td>' + column + '</td>';
    //             });
    //             html += '</tr>'
    //         }
    //     }
    //     html += '</table>';
    //     return html;
    // }
    
    //转化为layui表格
    function csv2table(csv, json) {

        var rows = csv.split('\n');

        let columns = rows[0].split(',');

        let obj = {
            table: {
                'tool': { checkbox: false, numbers: true, width: 200, toolbar: '' }
            },
            tabledata: json,
            config: {
                //是否显示换行
                even: false,
                //表格高度
                height: '#UploadTableDiv-40'
                // , page: true // 是否显示分页
                // , limits: [5, 10, 15, 20, 30] //选择可展示的页面数量
                // , limit: 15 // 每页默认显示的数量
                , th: { 'background-color': 'rgb(242,242,242)', 'color': 'black', 'font-weight': 'bold' } //表头的style
                , skin: 'line' //表格边框样式
            }
        }


        columns.map(c => {
            obj.table[c] = { "title": c, "type": "String", "width": 200, "edit": 'text' }
        })

        layui.laytpl.createUploadTable(obj)

    }




  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个利用 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 函数导入数据,并在回调函数中处理导入的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值