js读取本地 excel文件、txt文件的内容

<input type="file" @change="fileChange">

1、txt文件

fileChange(event) {console.log('fileChange', event)const file = event.target.files[0];const reader = new FileReader();reader.readAsText(file);reader.onload = function(e) {console.log('reader', e)// 文本内容console.error(reader.result)// 切分行// reader.result.split('\n').forEach(function(v, i){//     console.log(v);// });};
}

2、excel文件

1)安装解析插件xlsx

npm i xlsx

2)以 array 形式读取

import * as XLSX from 'xlsx'fileChange(event) {console.log('fileChange', event)const file = event.target.files[0];const reader = new FileReader();reader.readAsArrayBuffer(file);reader.onload = function(e) {console.log('reader', e)// excel文件 —— arrayconst data = new Uint8Array(e.target.result);const workbook = XLSX.read(data, {type: 'array'});// 假设我们只读取第一个工作表const firstSheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[firstSheetName];const jsonData = XLSX.utils.sheet_to_json(worksheet);console.log(jsonData, worksheet);};
}

3)以 binary 形式读取

import * as XLSX from 'xlsx'fileChange(event) {console.log('fileChange', event)const file = event.target.files[0];const reader = new FileReader();reader.readAsArrayBuffer(file);reader.onload = function(e) {console.log('reader', e)// excel文件 —— binaryconst workbook = XLSX.read(e.target.result, {type: 'binary'});const sheetNames = workbook.SheetNames; // 工作表名称集合const worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet// 输出字符串形式const csv = XLSX.utils.sheet_to_csv(worksheet);console.log(csv)// 输出数组形式const rows = csv.split('\n'); // 转化为数组rows.pop(); // 最后一行没用的console.log(rows);  // 打印输出的数组};
}

3、vue案例

一个可以解析获取本地excel文件和txt文件的按钮组件,可以自定义插槽内容

<parseExcelBtn @getResult="getResult"></parseExcelBtn><parseExcelBtn @getResult="getResult" btnWidth="300px"><span>自定义按钮</span>
</parseExcelBtn>getResult(e) {console.log(e)
},
<template><div class="parse-excel-btn" :style="{width: btnWidth}" @click="doClick"><slot v-if="hasDefaultSlotContent"></slot><div v-else class="txt">{{ btnTxt }}</div><input type="file" hidden accept=".txt, .xlsx, .xls" ref="fileInput" @change="fileChange"></div>
</template><script lang="ts" setup>import { ref, withDefaults, defineProps, defineEmits, watch, useSlots, onMounted } from 'vue'import * as XLSX from 'xlsx' import { Message } from 'view-ui-plus'interface Props {btnTxt?: string, // 按钮文本btnWidth?: string // 按钮宽度resultType?: string // 输出结果类型readType?: string // 读取类型}const props = withDefaults(defineProps<Props>(), {btnTxt: '导入excel',btnWidth: 'auto',resultType: 'string', // array stringreadType: 'binary' // array binary})console.log(props)const emit = defineEmits(['getResult'])const fileInput = ref(null)const hasDefaultSlotContent = ref(false)const slots = useSlots();onMounted(() => {// 检查默认插槽是否有内容if (slots.default) {const slotContent = slots.default();if(slotContent) {hasDefaultSlotContent.value = true}// hasDefaultSlotContent.value = slotContent.some(({ vnode }) => {// 	console.log(vnode)// 	// 检查节点是否是文本节点且不为空// 	return vnode.type === Text && vnode.children.trim() !== '';// });}})// 按钮点击function doClick() {if(fileInput) {fileInput.value.click()}}// 本地文件选择function fileChange(event: any) {console.log('fileChange', event)const file = event.target.files[0];let testMsg = file.name.substring(file.name.lastIndexOf('.')+1)if(!['txt','xlsx', 'xls'].includes(testMsg)) {Message.error('不是excel文件~')return}const reader = new FileReader();if(testMsg === 'txt') {reader.readAsText(file);} else {if(props.readType === 'array'){reader.readAsArrayBuffer(file);} else {reader.readAsBinaryString(file);}}reader.onload = function(e) {// console.log('reader', e)if(testMsg === 'txt') {// txt文件// console.error(reader.result)// reader.result.split('\n').forEach(function(v, i){//     console.log(v);// });emit('getResult', reader.result)} else {if(props.readType === 'array') {// excel文件 —— arrayconst data = new Uint8Array(e.target.result);const workbook = XLSX.read(data, {type: 'array'});// 假设我们只读取第一个工作表const firstSheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[firstSheetName];const jsonData = XLSX.utils.sheet_to_json(worksheet);// console.log(jsonData, worksheet);emit('getResult', jsonData)} else {// excel文件 —— binaryconst workbook = XLSX.read(e.target.result, {type: 'binary'});const sheetNames = workbook.SheetNames; // 工作表名称集合const worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheetconst csv = XLSX.utils.sheet_to_csv(worksheet);if(props.resultType === 'array') {// 数组形式const rows = csv.split('\n'); // 转化为数组rows.pop(); // 最后一行没用的// console.log(rows);  // 打印输出的数组emit('getResult', rows)} else {// 字符串形式// console.log(csv)emit('getResult', csv)}}}}}
</script><style lang="scss" scoped>.parse-excel-btn {cursor: pointer;.txt {line-height:40px;background:#ebf2ff;border-radius:6px;text-align: center;font-weight:500;color:#0055ff;font-size:16px;}}</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的学生成绩管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 系统功能结构展示 登录界面图 现今&#xff0c;越来越多的人乐于选择一项合适的管理方案&#xff0c;但是普通用户往往受到管理经验地限制&…

ES 常见面试题及答案

目录 es 写入数据流程 es 删除数据流程 es 读数据流程 es 部署的服务有哪些角色 es 的实现原理 es 和lucence 关系 如何提高写入效率 提高搜索效率 es doc value指的啥 分片指的啥&#xff0c;定义后可不可义再修改 深分页如何优化 对于聚合操作是如何优化的 元数据…

面试九 设计模式

单例模式通常被归类为创建型设计模式&#xff0c;因为它主要关注如何创建对象的实例&#xff0c;以及如何确保在整个应用程序生命周期中只有一个实例存在。 1.为什么日志模块和数据库连接池需要单例模式 使用单例模式来实现数据库连接池主要有以下几个原因&#xff1a; 全局唯…

[自研开源] MyData 数据集成之任务调度模式 v0.7

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;http://demo.mydata.work 交流 Q 群&#xff1a;430089673 概述 本…

四、Elasticsearch 进阶

自定义目录 4.1 核心概念4.1.1 索引&#xff08;Index&#xff09;4.1.2 类型&#xff08;Type&#xff09;4.1.3 文档&#xff08;Document&#xff09;4.1.3 字段&#xff08;Field&#xff09;4.1.5 映射&#xff08;Mapping&#xff09;4.1.6 分片&#xff08;Shards&#…

富格林:正视安全平台阻挠亏损

富格林悉知&#xff0c;当前不少投资者都意识到一款正规的平台能够帮助我们阻挠亏损确保安全。因此不少投资者在选择都会参考一些排行榜。但是网上这方面的榜单眼花缭乱&#xff0c;新手投资者可能难以从中挑选到能够帮助我们阻挠亏损确保安全的平台。下面富格林将给大家提供一…

STL_list文档使用介绍与底层代码实现简介

文章目录 list介绍list的使用构造函数&#xff08;constructor&#xff09;迭代器list capacitylist modify&#xff08;修改&#xff09;其他接口函数list迭代器失效问题 list实现基础框架(节点类&#xff09;基础框架&#xff08;迭代器类&#xff09;基础框架&#xff08;链…

docker仓库登录及配置insecure-registries的方法

docker仓库登录及配置insecure-registries的方法 这篇文章主要介绍了docker仓库登录配置insecure-registries的方法,docker客户端如果配置中添加了insecure-registary配置&#xff0c;就不需要在docker 客户端配置上对应证书&#xff0c;如果不配置要在/etc/docker/certs.d/目…

【机器学习300问】39、高斯分布模型如何实现异常检测?

一、异常检测是什么&#xff1f; &#xff08;1&#xff09;举几个例子 ① 信用卡交易异常检测 在信用卡交易数据分析中&#xff0c;如果某个用户的消费习惯通常是小额且本地化消费&#xff0c;那么突然出现一笔大额且跨国的交易就可能被标记为异常。 ② 电机温度异常检测 在电…

常见的几个JVM调优场景

文章目录 调优案例案例1&#xff1a;应对高并发、短生命周期对象的应用案例2&#xff1a;防止频繁Full GC导致延迟案例3&#xff1a;优化服务响应时间&#xff0c;减少停顿时间案例4&#xff1a;监控和诊断内存泄露 一些参数堆内存大小元空间大小垃圾收集器相关参数垃圾收集行为…

spring boot学习第十四篇:使用AOP编程

一、基本介绍 1&#xff0c;什么是 AOP &#xff08;1&#xff09;AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 &#xff08;2&#xff09;利用 AOP…

流畅的 Python 第二版(GPT 重译)(五)

第九章. 装饰器和闭包 有人对将这个功能命名为“装饰器”的选择提出了一些抱怨。主要的抱怨是该名称与其在 GoF 书中的用法不一致。 名称 decorator 可能更多地归因于其在编译器领域的用法—语法树被遍历并注释。 PEP 318—函数和方法的装饰器 函数装饰器让我们在源代码中“标记…

色环电感的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点4,工艺流程4.1,磁芯制备:4.2,线圈绕制:5,选型参数5.1,电感值(L)5.2,电流容量(I)5.3,品质因数(Q)5.4,自谐振频率(SRF)5

windows下常用的DOS命令

DOS&#xff08;Disk Operating System&#xff09;是 Windows 操作系统中的命令行接口&#xff0c;也可以叫命令行窗口。一提到这个&#xff0c;很多初入行计算机的朋友们就是很犯怵&#xff0c;不知所错&#xff0c;好高端&#xff0c;有没有。界面如下&#xff1a; 普通用户…

【小程序开发】出行 API 汇总(一)

ty.outdoor.openOutdoorCyclingNavigation 跳转骑行导航页面 引入 import { openOutdoorCyclingNavigation } from ray-js/ray; 注意&#xff1a;当前功能仅在智慧出行App开通使用&#xff0c;需要在基础库2.15.14及以上版本使用。 参数 Object object 属性类型默认值必填…

分享一些关于在实施面试过程被问到的问题

1&#xff0c;说说你对行业现状和发展趋势的看法 一、行业现状&#xff1a; 技术创新&#xff1a;科技行业在近年来取得了显著的技术突破&#xff0c;包括人工智能、大数据、云计算、物联网等领域的发展。这些技术的创新为各行各业带来了前所未有的变革。竞争激烈&#xff1a;…

ARM与X86架构的简单剖析与未来展望

引言 在计算机硬件领域&#xff0c;ARM和X86架构无疑是两种最具影响力的处理器架构。它们各自在全球范围内应用于广泛的设备中&#xff0c;从嵌入式系统到服务器&#xff0c;再到个人电脑和移动设备&#xff0c;塑造了现代计算技术的面貌。本文将深入解析ARM与X86架构的异同&am…

【样式】Html 卡片样式

【样式】Html 卡片样式 .card {width: calc(40% - 10px);height: 160px;display: inline-block; /* 或者 flex / block 根据布局需求 */position: relative;margin: 10px; /* 添加边距以确保卡片之间有间距 */padding: 15px; /* 内边距为内容提供空间 */background-color: rgba…

【Python爬虫】将某网页中表格里的十六进制颜色值转换成十进制,再生成新表格

【需求】 在 https://www.cnblogs.com/heyang78/p/5712076.html 上有360种颜色及代码&#xff0c;但很遗憾没有十进制的RGB值&#xff0c;使用时需要自己转换一下&#xff0c;此过程依赖网络或计算器&#xff0c;颇为不便。因此&#xff0c;拟设计一爬虫将原有表格内容取出&am…

【Linux】初识进程

目录 操作系统是什么 设计操作系统的目的 操作系统的定位 如何理解管理 管理的本质 管理的例子 计算机的管理概念图 操作系统管理逻辑的六字真言 系统调用和库函数的概念 进程 进程的概念 什么是PCB&#xff1f; PCB的主要内容 如何查看进程&#xff1f; 通过系统…