前端几行代码实现excel表格解析

目录

需求

优势

利用技术

实现过程

处理excel

表格数据预览

数据预览

完整代码


需求

利用前端技术和浏览器的打印功能,实现excel文件打印。

优势

可直接本地上传,不用产生数据交互,操作便捷。

利用技术

JavaScript +xlsx

 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.core.min.js"></script>

实现过程

使用input标签,不能修改浏览文件为上传文件,可以按照我下面的方法去写

 // HTML
<button class="btn" @click="uploadFile">上传excel文件</button>
// JavaScript
const uploadFile = (mark) => {
    let inputEle = document.createElement('input')
    inputEle.type = 'file'
    inputEle.accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,             
    application/vnd.ms-excel'
    inputEle.click()
    inputEle.addEventListener('input', (event) => {
        // excel文件处理逻辑
        onExcel( event)
    })
};

处理excel

可以根据自己的需求,处理成自己想要的数据,我这里是处理成两种格式,完整的代码,我放到最后面了!!!

// JavaScript
const onExcel = (event) => {
    let reader = new FileReader();
    let file = event.target.files[0];
    let fileName = file.name
    if (file) {
        reader.onload = function (e) {
            let data = e.target.result;
            let workbook = XLSX.read(data, { type: 'binary' });
            let sheetName = workbook.SheetNames[0];
            let sheet = workbook.Sheets[sheetName];
            dataArray.value = XLSX.utils.sheet_to_json(sheet, { header: 1 });
            objectArray.value = XLSX.utils.sheet_to_json(sheet);
    };
    reader.readAsArrayBuffer(file);
    }
}

表格数据预览

数据预览

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
    <title>上传excel文件</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .container{
            padding:0 50px;
        }
        .operation {
            padding: 20px;
        }

        .btn {
            min-width: 50px;
            font-size: 20px;
            color: #fff;
            background: #118ee9;
            margin: 0 20px 0 0;
            padding: 8px;
            border: none;
            border-radius: 4px;
            box-sizing: border-box;
        }

        .item {
            width: 350px;
            box-sizing: border-box;
            padding: 4px 14px 4px 14px;
            color: #000;
            font-size: 12px;
            background: #fff;
        }
    </style>

    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.core.min.js"></script>

</head>

<body>
    <div class="container" id="app">
        <div class="operation">
            <button class="btn" @click="uploadFile">上传excel文件</button>
        </div>
        <div v-if="objectArray.length ">
            <div v-for="val in objectArray">{{val}}</div>
        </div>
        <br>
        <div v-if="dataArray.length ">
            <div v-for=" val in dataArray">{{val}}</div>
        </div>
    </div>
    <script>
        const { createApp, ref} = Vue
        createApp({
            setup() {
                let objectArray = ref([]);
                let dataArray = ref([]);
                const uploadFile = (mark) => {
                    let inputEle = document.createElement('input')
                    inputEle.type = 'file'
                    inputEle.accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'
                    inputEle.click()
                    inputEle.addEventListener('input', (event) => {
                        onExcel( event)
                    })
                };

                const onExcel = (event) => {
                    let reader = new FileReader();
                    let file = event.target.files[0];
                    let fileName = file.name
                    if (file) {
                        reader.onload = function (e) {
                            let data = e.target.result;
                            let workbook = XLSX.read(data, { type: 'binary' });
                            let sheetName = workbook.SheetNames[0];
                            let sheet = workbook.Sheets[sheetName];
                            dataArray.value = XLSX.utils.sheet_to_json(sheet, { header: 1 });
                            objectArray.value = XLSX.utils.sheet_to_json(sheet);
                        };
                        reader.readAsArrayBuffer(file);
                    }
                }
                return {
                    dataArray,
                    objectArray,
                    uploadFile,
                    onExcel,
                }
            }
        }).mount('#app')
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值