vite + vue3 + js + xlsx 导出excel
安装依赖
1 npm install xlsx --save
使用版本

封装js
/* 导出excel文件 */ /**
* 导出excel文件实现思路分析
*
* 1.通过XLSX插件的 XLSX.utils.book_new()方法,创建excel工作蒲对象wb。
* 2.按需插入第一行数据,通过数组的unshift()方法。
* 3.通过XLSX.utils.json_to_sheet(),创建excel表格对象ws。
* 4.通过json_to_array(key,data),结合自定义的字段名key,和数据记录data,生成新数组。
* 5.通过auto_width(),对ws和新生成的数组,自动计算各列col宽。
* 6.通过XLSX.utils.book_append_sheet(),生成实际excel工作蒲,并使用XLSX.writeFile()生成excel文件。
*/ // 不能用!!!!!!真的坑,我是服了
// import XLSX from 'xlsx' import * as XLSX from 'xlsx' // 自动计算col列宽
function auto_width (ws, data) {
/*set worksheet max width per col*/
const colWidth = data.map(row => row.map(val => {
/*if null/undefined*/
if (val == null) {
return { 'wch': 10 }
}
/*if chinese*/
else if (val.toString().charCodeAt(0) > 255) {
return { 'wch': val.toString().length * 2 }
} else {
return { 'wch': val.toString().length }
}
}))
/*start in the first row*/
let result = colWidth[0]
for (let i = 1; i < colWidth.length; i++) {
for (let j = 0; j < colWidth[i].length; j++) {
if (result[j]['wch'] < colWidth[i][j]['wch']) {
result[j]['wch'] = colWidth[i][j]['wch']
}
}
}
ws['!cols'] = result
} // 将json数据转换成数组
function json_to_array (key, jsonData) {
return jsonData.map(v => key.map(j => {
return v[j]
}))
} /**
* @param header Object,表头
* @param data Array,表体数据
* @param key Array,字段名
* @param title String,标题(会居中显示),即excel表格第一行
* @param filename String,文件名
* @param autoWidth Boolean,是否自动根据key自定义列宽度
*/
export const exportJsonToExcel = ({
header,
data,
key,
title,
filename,
autoWidth
}) => {
const wb = XLSX.utils.book_new()
if (header) {
data.unshift(header)
}
if (title) {
data.unshift(title)
}
const ws = XLSX.utils.json_to_sheet(data, {
header: key,
skipHeader: true
})
if (autoWidth) {
const arr = json_to_array(key, data)
auto_width(ws, arr)
}
XLSX.utils.book_append_sheet(wb, ws, filename)
XLSX.writeFile(wb, filename + '.xlsx')
}
export default {
exportJsonToExcel
}
template使用
import { exportJsonToExcel } from "@/util/exportExcel.js";
const exExcel = () => {
const tableField = [
"userCode",
"userName",
"department",
"major",
"position",
],
tableHeader = {
userCode: "工号",
userName: "姓名",
department: "部门",
major: "专业",
position: "职位/职称",
},
tableTitle = "导出表格",
templateData = [
{
userCode: "N1001",
userName: "张三",
department: "综合管理部",
major: "计算机科学与技术",
position: "项目经理",
},
],
obj = {
header: tableHeader,
data: templateData,
key: tableField,
title: "",
filename: "团队成员导入模板",
autoWidth: true,
};
exportJsonToExcel(obj);
};
vite + vue3 + js + xlsx 导出excel的更多相关文章
- 【转】js 中导出excel 较长数字串会变为科学计数法
[转]js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串 ...
- js前端导出excel:json形式的导出
第一中形式的导出:主要是表头对应主体数据,json形式的导出 js库文件名称 : table2excel.js这个js库文件是网上找的,并且自己根据自己业务需求把内容改了一下复制到 table2exc ...
- React ant table 用 XLSX 导出excel文件
近期做了一个react ant design 的table转换成excel 的功能 总结下 首先我们会自己定义下 antdesign 的table的columns其中有可能有多语言或者是render方 ...
- js前端导出excel
此例子是利用html特性,纯前端导出excel,样式不好看,兼容主流浏览器. var tableid = jQuery(this).closest("div.tab-label-wrap&q ...
- js原生导出excel和csv
严格意义来说并不是真正的excel文件,只是可以用excel打开查看而已,实际上的格式是逗号分隔文件即csv文件. 这里有几个坑要说一下: 不加Unicode的utf8头部标识excel打开文件会 ...
- js一键导出Excel
HTML: 1 <div class="container"> 2 <table id="backViewTable" class=" ...
- js导入导出excel
导入: <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Unti ...
- js 中导出excel 较长数字串会变成科学计数法
在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...
- js 中导出excel 较长数字串会变成科学计数法(转载)
在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...
- js前端导出Excel表格后数字自动变成科学计数法问题
一般的文件导出都是后端进行导出,最近一个项目遇到导出接口挂掉了,前端实现导出的情况. 背景是vue框架,iView组件.可以直接使用exportCsv方法进行导出. 导出时进行一下行和列的切割就可以了 ...
随机推荐
- 怎么在GridView中限制显示字数
三种方法可以实现,前两种是C#代码实现(原理一样),第三种是CSS实现. 1.cs代码中:GridView的RowDataBound中对想做处理的项做Remove()字符串截取. 2.aspx页面中: ...
- 3 .NET Core笔试题
1.什么是ASP.NET Core? 2.ASP.NET Core 中AOP的支持有哪些? 3.ASP.NET Core Filter的注册方式有哪些? 4.ASP.NET Core Filter如何 ...
- Spring事务(Transaction)管理高级篇一栈式解决开发中遇到的事务问题
Spring是目前Java开发中最流行的框架了,它的事务管理我们在开发中常常的用到,但是很多人不理解它事务的原理,导致开发中遇到事务方面的问题往往都要用很长的时间才能解决,下面就带着大家去深入了解Sp ...
- C++练习5 对引用进行初始化
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 const int cInt = 3;//定义常量cInt并 ...
- 手写一个audio播放器,实现歌曲切换,列表歌曲循环,音量调节等 vue组件
1 <template> 2 <div class="wrapper"> 3 <svg 4 t="1673833915638" 5 ...
- 【JS入门小游戏】01-骰子游戏
01-骰子游戏 游戏出自Udemy的JS课程中提到的一个游戏,课程主要是对JS部分进行详细的从0开始的讲解,本篇文章是对整个游戏的分析,包括HTMK,CSS和JS,也主要对JS进行刨析. 游戏链接:h ...
- 理解JS函数之call,apply,bind
前言 在 JavaScript 中,apply.bind 和 call 是三个重要的函数,它们都是 Function.prototype 的方法.这些函数可以让我们动态地改变函数的 this 值,或者 ...
- T-SQL——将字符串转为单列
目录 0. 背景 1. 使用STRING_SPLIT函数 2. 自定义分裂函数 3. 使用示例 shanzm-2023年2月22日 0. 背景 代码中执行存储过程,参数是多个且不确定数量,期望SQL查 ...
- PO/PI
典型集成场景 PI总体架构 消息映射 General Concepts(通用概念) 映射编辑器 元素 分配源/目标消息类型 有3种消息类型可分配给消息映射 1.使用已经存在于IR中的对象(比如消息类型 ...
- MATLAB批量处理表格类型文件
MATLAB版本2020b 问题背景:预处理数据,有若干变压器温度表格,要将变压器运行温度数据提取出来 通过LSTM模型进行温度预测