前端上传Excel,解析并渲染到表格中(前端实现)

用户将已有的excel上传到系统,并将excel数据同步到页面的表格中进行二次编辑

1.安装xlsx,在终端运行以下命令

npm install xlsx

2.在需要使用的页面引入xlsx

import * as xlsx from 'xlsx'

3.编写上传组件,这里是element-UI

<el-upload
                            ref="waterUploadRef"
                            action=""
                            :http-request="httpExcelRequest"
                            :limit="1"
                            :show-file-list="false"
                            class="uploadExcelContent"
                            :data="{}"
                        >
                            <div title="导入excel" style="cursor: pointer">
                                <div>导入excel</div>
                            </div>
                        </el-upload>



涉及到动态设置ref的原因:

一是由于upload组件在设置了 :limit="1",在上传第一个文件之后,浏览器会保存着我们已经上传的文件,导致我们继续上传文件的时候,页面没有反应;解决该问题需要在on-success钩子函数中通过ref来清除已经上传的文件

5.上传并解析,匹配表头重组数组 

// 文件上传自定义
        async httpExcelRequest(op) {
            // 获取除文件之外的参数,具体根据实际业务需求来
            console.log(op.data)
            // 获取上传的excel  并解析数据
            const file = op.file
            const dataBinary = await this.readFile(file)
            const workBook = xlsx.read(dataBinary, { type: 'binary', cellDates: true })
            const workSheet = workBook.Sheets[workBook.SheetNames[0]]
            const excelData = xlsx.utils.sheet_to_json(workSheet, { header: 1 })
            // 提取列名
            const headers = excelData[0]
            // 移除列名行
            excelData.shift()
            // 创建映射关系,将中文列名映射到你想要的属性名
            const headerMap = {
                经度: 'lon',
                纬度: 'lat',
                水位: 'waterLevel'
            }
            // 转换数据行到对象数组
            const tempList = excelData.map((item, index) => {
                const excelItem = {}
                headers.forEach((header, headerIndex) => {
                    excelItem[headerMap[header]] = item[headerIndex]
                })
                return excelItem
            })
            console.log(tempList)
            this.requestForm.waterLevelList=[...this.requestForm.waterLevelList,...tempList]
            if (this.$refs.uploadRefMap) {
                this.$refs.uploadRefMap.clearFiles()
            }
        },

        readFile(file) {
            return new Promise(resolve => {
                const reader = new FileReader()
                reader.readAsBinaryString(file)
                reader.onload = ev => {
                    resolve(ev.target?.result)
                }
            })
        }

希望得到的数据是,所以进行了转换

[
{
lon: '', // 经度
lat: '', // 纬度
waterLevel: '' // 水位
}
]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现前端读取Word表格渲染到界面,可以使用以下步骤: 1. 首先,需要将Word表格转换为可被前端读取的格式。可以使用一些库或工具将Word文档转换为HTML、JSON或其他前端友好的格式。例如,可以使用python-docx库将Word文档转换为HTML格式。 2. 在前端页面,使用JavaScript来读取并解析转换后的表格数据。可以使用一些开源的JavaScript库来解析HTML或JSON格式的表格数据,例如jQuery、Tabletop.js等。 3. 在前端页面,使用HTML和CSS来渲染表格数据。根据解析到的表格数据,可以使用HTML标签(如table、tr、td等)来创建表格的结构并使用CSS样式来美化表格的外观。 4. 可以使用JavaScript来处理表格的交互逻辑。例如,可以添加一些事件监听器来响应用户的点击或拖拽操作,并实现一些动态效果,如表格的排序、筛选等。 在实现过程,需要考虑以下几点: - Word文档的结构复杂性:由于Word文档可能包含各种复杂的表格结构和样式,需要在转换和解析过程处理这些复杂性,确保表格能正确地被渲染前端页面。 - 数据安全性:在处理Word表格数据时,需要注意保护用户的隐私和敏感信息。可以在服务器端进行数据处理,避免在客户端暴露敏感数据。 - 兼容性:考虑不同浏览器和设备的兼容性,确保在各种环境都能正常读取和渲染Word表格。 总结:实现前端读取Word表格渲染到界面,需要将Word文档转换为前端可读取的格式,使用JavaScript解析和处理表格数据,并使用HTML和CSS来渲染表格的结构和样式。同时,需要考虑Word文档的复杂性、数据安全性和兼容性等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值