导入员工 excel 批量上传


1. 安装 包 npm i xlsx yarn add xlsx
2. 封装一个上传的组件 src/components/UploadExcel/index.vue

code :
<template>
<div class="upload-excel">
<div class="btn-upload">
<el-button
:loading="loading"
size="mini"
type="primary"
@click="handleUpload"
>
点击上传
</el-button>
</div>
<!-- 文件控件 -->
<input
ref="excel-upload-input"
class="excel-upload-input"
type="file"
accept=".xlsx, .xls"
@change="handleClick"
/>
<div
class="drop"
@drop="handleDrop"
@dragover="handleDragover"
@dragenter="handleDragover"
>
<i class="el-icon-upload" />
<span>将文件拖到此处</span>
</div>
</div>
</template> <script>
import * as XLSX from "xlsx"; // 所有的按需导入的内容
// import XLSX from "xlsx"; // 读取xlsx默认暴露的内容 export default {
props: {
beforeUpload: Function, // eslint-disable-line
onSuccess: Function, // eslint-disable-line
},
data() {
return {
loading: false,
excelData: {
header: null,
results: null,
},
};
},
methods: {
generateData({ header, results }) {
this.excelData.header = header;
this.excelData.results = results;
// onSuccess 是否有? 如果有就执行 onSuccess,并且传入读取出来的Excel数据
this.onSuccess && this.onSuccess(this.excelData);
},
handleDrop(e) {
e.stopPropagation();
e.preventDefault();
if (this.loading) return;
const files = e.dataTransfer.files;
if (files.length !== 1) {
this.$message.error("Only support uploading one file!");
return;
}
const rawFile = files[0]; // only use files[0] if (!this.isExcel(rawFile)) {
this.$message.error(
"Only supports upload .xlsx, .xls, .csv suffix files"
);
return false;
}
this.upload(rawFile);
e.stopPropagation();
e.preventDefault();
},
handleDragover(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = "copy";
},
handleUpload() {
console.log("上传文件"); this.$refs["excel-upload-input"].click();
},
//
handleClick(e) {
// e 是上传的文件信息
console.log("上传文件");
const files = e.target.files;
const rawFile = files[0]; // only use files[0]
if (!rawFile) return;
this.upload(rawFile);
},
upload(rawFile) {
this.$refs["excel-upload-input"].value = null; // fix can't select the same excel if (!this.beforeUpload) {
this.readerData(rawFile);
return;
}
const before = this.beforeUpload(rawFile);
if (before) {
this.readerData(rawFile);
}
},
readerData(rawFile) {
this.loading = true;
return new Promise((resolve, reject) => {
// 实例化一个文件读取器
const reader = new FileReader(); // FileReader 是JS内部的内置对象,叫做文件阅读器
// 读取结束之后
reader.onload = (e) => {
// 读取到的数据
const data = e.target.result;
// 使用第三方包xlsx 解析 文件读取器解析出来的数据, 变成Excel的工作区
const workbook = XLSX.read(data, { type: "array" });
// 取出第一个sheet
const firstSheetName = workbook.SheetNames[0];
// 读取第一个sheet工作区
const worksheet = workbook.Sheets[firstSheetName];
// 读取sheet里面的头部内容
const header = this.getHeaderRow(worksheet);
// 将第一个sheet工作区变成json数据
const results = XLSX.utils.sheet_to_json(worksheet);
console.log(results);
this.generateData({ header, results });
this.loading = false;
resolve();
};
// 读取文件,作为 Buffer类型进行读取
reader.readAsArrayBuffer(rawFile);
});
},
getHeaderRow(sheet) {
const headers = [];
const range = XLSX.utils.decode_range(sheet["!ref"]);
let C;
const R = range.s.r;
/* start in the first row */
for (C = range.s.c; C <= range.e.c; ++C) {
/* walk every column in the range */
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })];
/* find the cell in the first row */
let hdr = "UNKNOWN " + C; // <-- replace with your desired default
if (cell && cell.t) hdr = XLSX.utils.format_cell(cell);
headers.push(hdr);
}
return headers;
},
isExcel(file) {
return /\.(xlsx|xls|csv)$/.test(file.name);
},
},
};
</script> <style scoped lang="scss">
.upload-excel {
display: flex;
justify-content: center;
margin-top: 100px;
.excel-upload-input {
display: none;
z-index: -9999;
}
.btn-upload,
.drop {
border: 1px dashed #bbb;
width: 350px;
height: 160px;
text-align: center;
line-height: 160px;
}
.drop {
line-height: 80px;
color: #bbb;
i {
font-size: 60px;
display: block;
}
}
}
</style>
导入上传组件:

导入员工 excel 批量上传的更多相关文章
- 使用phpExcel批量上传excel表数据到mysql数据库中
/*批量上传数据*/ if(isset($_POST['submit']) && $_POST['submit']=='上传文件') { //导入类文件 require_once (& ...
- Thinkphp5+PHPExcel实现批量上传表格数据功能
http://www.jb51.net/article/129262.htm 1.首先要下载PHPExcel放到vendor文件夹下,我的路径是:项目/vendor/PHPExcel/,把下载的PHP ...
- 文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)--SNF快速开发平台3.0
实际上在SNF里使用附件管理是非常简单的事情,一句代码就可以搞定.但我也要在这里记录一下统一附件管理器能满足的需求. 通用的附件管理,不要重复开发,调用尽量简洁. 批量文件上传,并对每个文件大小限制, ...
- magento -- 如何在magento中进行产品的批量上传
花费了好多时间,阅读了magento官方论坛上几乎所有的批量上传产品的相关帖子,分析了大量相关magento代码,终于可以完全实现指产品批量上传的功能,免除网速慢,在页面之间跳来跳去,以及重复输入数据 ...
- [SAP ABAP开发技术总结]客户端文本文件、Excel文件上传下载
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Springmvc+uploadify实现文件带进度条批量上传
网上看了很多关于文件上传的帖子,众口不一,感觉有点乱,最近正好公司的项目里用到JQuery的uploadify控件做文件上传,所以整理下头绪,搞篇文档出来,供亲们分享. Uploadify控件的主要优 ...
- ecshop 后台批量上传商品 完整上传
ecshop 后台批量上传商品,之所以无法上传,是因为后台上传php文件方法中没有导入商品原图路径 将ecshop根目录中的admin/goods_batch.php文件全部修改为 <?php ...
- 首页商品图片显示错位,easy-popular批量上传
=============关于zencart批量商品管理的说明================== 首先,安装好批量商品管理模块,设置 /tempEP 目录可写二.确认你已经在后台增加了一些分类目录. ...
- mvc文件上传支持批量上传,拖拽以及预览,文件内容校验等
使用bootstrap-fileinput 使用方式: 1.nuget:Install-Package bootstrap-fileinput 2.语言本地化{下载fileinput_locale_z ...
- .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件
asp.net mvc请移步 mvc文件上传支持批量上传,拖拽以及预览,文件内容校验 本篇内容主要解决.net core中文件上传的问题 开发环境:ubuntu+vscode 1.导入所需要的包:n ...
随机推荐
- 【DataBase】排课设计思路
想设计一个排课系统,看了网上文库的表结构设计弄的我是一点没看懂 看看知乎又是扯一堆算法 我想一个适用所有学校的排课程序是不现实的,需求是千变万化的 我们理解的,看到的都是已经排好的结果,是Excel把 ...
- Jax框架 —— 如何在没有GPU和TPU的设备上debug代码 —— 在CPU上使用GPU仿真设置 —— Jax框架在多卡设备上的自动并行特性的仿真体验
Jax计算框架是Google用来取代Tensorflow的新一代计算框架,这个框架使用类似pytorch的技术,但是在pytorch技术之上加入了更加强大的技术,但是这也导致该框架使用起来要比pyto ...
- Ubuntu18.04系统下网络文件系统nfs的安装及简单配置
硬件环境: 两台Ubuntu18.04服务器使用局域网连接,IP分别为192.168.11.66 和 192.168.11.206. ================================= ...
- 编程语言mojo报错:error: cannot call function that may raise in a context that cannot raise
代码: from python import Python fn main(): # fn main() raises: # This is equivalent to Python's `impor ...
- 记录一次Ubuntu20.04死机经过!!!在Ubuntu下使用Chrome的“无痕式”窗口,如果打开标签页过多就会造成死机
这里要说的事情就是自己刚刚经历的事情,而且尝试了多次最后证明,在Ubuntu下使用Chrome的"无痕式"窗口,如果打开标签页过多就会造成死机. 如何在Ubuntu下安装Chrom ...
- ChatGLM
ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools(2024.7.16) Code:https:// ...
- SMU Summer 2023 Contest Round 5
SMU Summer 2023 Contest Round 5 A. Points in Segments \(\mathcal{O}(n \times m)\) 做法数据范围小,直接把每次的\(l ...
- 12米空间分辨率DEM数据申请下载:TanDEM-X数据集
本文介绍全球12米与30米高空间分辨率的数字高程模型(DEM)数据--TanDEM-X数据的下载申请方法. Tandem-X卫星项目于2010年6月启动,并于2010年6月21日和2010年1 ...
- Oracle数据库自动备份
1.bat脚本 格式为ANSI格式 set CURDATE=%date:~0,4%%date:~5,2%%date:~8,2% set CURMON=%date:~0,4%%date:~5,2% se ...
- Windows提权方式汇总
windows 提权 一.土豆(potato)家族提权 原理 土豆提权就是通过 windows 的 COM(Component Object Model,组件对象模型)类.向指定的服务器端口发送 NT ...