首页 > 其他分享 >前端使用xlsx插件读取excel文件数据

前端使用xlsx插件读取excel文件数据

时间:2023-09-01 17:24:09浏览次数:27  
标签:xlsx 插件 sheet 读取 XLSX utils excel sheetName const

安装xlsx插件

npm install xlsx

导入xlsx

import XLSX from 'xlsx'

前端UI如下:

文件上传.png

<bk-upload
        :tip="'只允许上传JPG、PNG、JPEG的文件'"
        :with-credentials="true"
        :accept="'.xlsx, .xls'"
        @custom-request="getExcel"
        :multiple="false">
</bk-upload>

点击上传:

getExcel (file) {
    console.log(file)
     const types =file.fileObj.name.split(".")[1] 
    const fileType = ["xlsx","xls"].some( 
        item => item === types 
    ) 
    if(!fileType){ 
        return false
    }
    this.analysis(file).then(tableJson =>{ 
        if (tableJson && tableJson.length > ){
            this.formData.storages =[]
            const dataExcel=tableJson[0] 
            const data=JSON.parse(JSON.stringify(dataExcel.sheet)) 
            const items = data.map(ite => { 
                return { 
                    'dish_num':ite['盘号'],
                    'store_name':ite['数据存储名'],
                    'key': ite['盘号'] +'_'+ ite['数据存储名'] 
                }
            }) 
            this.formData.storages = items 
        }
    })
}

得到的文件信息如下,在这里只需要关注fileList中的origin内容
391693555688_.pic_hd.jpg

对得到的文件信息进行处理,使用FileReader

主要分为三步:

1、构建FileReader对象
2、使用reader.readAsBinaryString()指定需要读取的内容,一旦完成,result属性中将包含所读取文件的原始二进制数据
3、在reader.onload中触发读取完成之后的操作

analysis (file){
    return new Promise(function (resolve) {
        # 1、构建FileReader对象
        const reader =new FileReader()
        # 3、读取完成时的操作
        reader.onload = function (e){
            # 使用XLSX解析读取到的数据
            const data = e.target.result
            const datajson = XLSX.read(data, {type: "binary"})
            const result = []
            datajson.SheetNames.forEach(sheetName => {
                result.push({
                    sheetName: sheetName,
                    sheet: xLsx.utils.sheet_to_json(datajson.Sheets[sheetName])
                })
            })
            resolve(result)
        }
        # 2、传入需要读取的内容
        reader.readAsBinaryString(file.fileList[0].origin)
    })
}

XSLX解析二进制数据,使用XLSX.read(data, {type: type})来完成

type的类型如下

base64: 以base64方式读取
binary: BinaryString格式(byte n is data.charCodeAt(n))
string: UTF8编码的字符串
buffer: nodejs Buffer
array: Uint8Array,8位无符号数组
file: 文件的路径(仅nodejs下支持)

我们这里使用的是binary,读取到的数据如下:

401693557607_.pic.jpg

解析sheet的方法如下:

XLSX.utils.sheet_to_csv:生成CSV格式
XLSX.utils.sheet_to_txt:生成纯文本格式
XLSX.utils.sheet_to_html:生成HTML格式
XLSX.utils.sheet_to_json:输出JSON格式

我们在这里使用XLSX.utils.sheet_to_json,XLSX.utils.sheet_to_json(data, type)有两个参数,第一个是我们wordBook对象里面Sheets对象对应的数据,第二个参数配置如下:

raw: 使用原始值 (true) 或格式化字符串 (false)  (默认值:true)
dateNF: 在字符串输出中使用指定的日期格式(默认值:FMT 14)
defval: 使用指定值代替 null 或 undefined ()
blankrows: 在输出中包含空行**(默认值:** )
range: 

        (number)使用工作表范围,但将起始行设置为值

        (String)使用指定范围(A1 样式的有界范围字符串

        (default)使用工作表范围 ( worksheet[‘!ref’])

header:

        1: 生成数组数组(“二维数组”)

        "A".行对象键是文字列标签

        array of strings: 使用指定的字符串作为行对象中的键

        (default): 将第一行作为键读取并消除歧义

默认是将第一行作为键读取数据,xLsx.utils.sheet_to_json(datajson.Sheets[sheetName])读取到的数据如下:

431693558934_.pic_hd.jpg

扩展:读取复杂表头的表格

复杂表头使用,XLsx.utils.sheet_to_json(datajson.Sheets[sheetName], {header: 1},生成二维数组

mulAnalysis (file){
    return new Promise(function (resolve) {
        const reader = new FileReader()
        reader.onload = function(e){
            const data =e.target.result
            const datajson = XLSx.read(data,{type: "binary"})
            const result = []
            datajson.SheetNames.forEach(sheetName => {
                const items = XLsx.utils.sheet_to_json(datajson.Sheets[sheetName], {header: 1}
                result.push({
                    sheetName: sheetName,
                    sheet: items.splice(2, items.length)
                })
            })
            resolve(result)
        }
        reader.readAsBinaryString(file.fileList[0].origin)
    })
}

标签:xlsx,插件,sheet,读取,XLSX,utils,excel,sheetName,const
From: https://www.cnblogs.com/wangyingblock/p/17672438.html

相关文章

  • 金蝶云星空-插件调试 (协同开发云五)
     解决方案:如果是协同开发云搭建的环境,先在VS中重新生成解决方案,然后启动开发环境,然后附加进程iisexpress.exe调试。 具体操作:一、启动开发环境。 2、登陆业务账套 http://localhost:1200/html53、管理员身份打开vs2019,找到需调试代码,打断点,然后附加到进程......
  • Excel中单元格内的长段文字怎么换行呢?4个方法任你选!
    案例描述:excel单元格文字怎么换行?场景再现:【我是一名Excel的菜鸟,每次做表我都要被这么多功能搞得头晕目眩了!今天又遇到一个让我头疼的问题:Excel表格如何才能换行呢?各位大佬,求指点!】在Excel电子表格环境下,对文本进行自动换行的处理,乃是一项常见的用户需求。此方法能实现单元格内......
  • Excel函数查询-----------------------------------filter函数(可以代替vlookup函数)
     求a=FILTER(B2:G8,A2:A8=I11,"")  先选定几列,然后在第一行去输入函数,再拉取就可以了......
  • Python中处理Excel文件的常见问题与技巧
    Python中处理Excel文件的常见问题与技巧在数据分析和办公自动化领域,Excel是一种广泛使用的工具。本文将介绍如何利用Python来处理Excel文件时可能遇到的常见问题,并分享一些实用技巧。1.安装必要库使用pip或conda安装openpyxl、pandas等第三方库;.xlsx格式.2.读取和写入Excel文件......
  • 使用SheetJs实现在线预览Excel(保留单元格格式信息)
    一、寻找合适的在线预览Excel的js库经过百度各种搜索,加上ChatGpt推荐,决定用SheetJs实现在线预览Excel。下面是SheetJs的官网介绍:SheetJS电子表格简化读取、编辑和导出电子表格适用于网络浏览器和服务器Office365受到Microsoft信任 SheetJS软件为业务提供动力谷歌、......
  • 有了Excel和PPT,为什么我们还需要数据可视化工具?
    在当今信息时代,数据扮演着越来越重要的角色,而数据的可视化呈现正是一种强大的工具,能够帮助我们更好地理解和利用这些数据。虽然Excel和PPT在处理数据方面有着不可否认的作用,但在处理大规模、复杂数据时,数据可视化工具的独特优势却愈发显现。第一,数据可视化工具能够将抽象的数据......
  • ES 入门一:ES和Kibanin的安装&插件安装
    一、ES1、ES的安装:   官网下载,解压即用2、es的启动:部署的http://localhost:9200访问,页面的内容3、ES的插件的安装:(1)已安装插件的查看:    sudo./elasticsearch-pluginlist(2)安装插件:sudo./elasticsearch-plugininstallanalysis-icu 注意:es不允许roo......
  • excel导出功能
    packagecom.infosec.ztpdp.policycenter.module.audit.controller;importjava.io.IOException;importjava.io.OutputStream;importjava.net.URLDecoder;importjava.text.SimpleDateFormat;importjava.util.HashMap;importjava.util.List;importjava.util.Map;......
  • 存储过程导出EXCEL
    请参考下面代码:--创建存储过程CREATEPROCEDUREExportToExcel@TableNameNVARCHAR(128)ASBEGIN--创建临时表来存储查询结果CREATETABLE#TempTable(IDINT,Column1NVARCHAR(50),Column2NVARCHAR(50),Column3NVARCHAR(50))--执行查询并将结果插入临时表INS......
  • pg10 安装pageinspect插件
    1.切换到源码包的contrib路径下,ls插件名称cd/data/soft/PostGreSQL/postgresql-10.20/contrib/pageinspect编译该插件makegcc-Wall-Wmissing-prototypes-Wpointer-arith-Wdeclaration-after-statement-Wendif-labels-Wmissing-format-attribute-Wformat-security-fn......