vue3前端excel导出;组件表格,自定义表格导出;Vue3 + xlsx + xlsx-style

这篇具有很好参考价值的文章主要介绍了vue3前端excel导出;组件表格,自定义表格导出;Vue3 + xlsx + xlsx-style。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当画面有自定义的表格或者样式过于复杂的表格时,导出功能可以由前端实现

1. 使用的插件 : sheet.js-xlsx

文档地址:https://docs.sheetjs.com/
中文地址:https://geekdaxue.co/read/SheetJS-docs-zh/README.md
xlsx-style:https://www.npmjs.com/package/xlsx-style
vue3 xlsx-style,vue,插件,前端,excel,vue

2. 安装引用

安装插件-vue3

yarn add xlsx 
yarn add xlsx-style-vite (有样式需求才需要安装;背景色等)

引用插件

import * as XLSX from 'xlsx';
import * as XLSX_STYLE from 'xlsx-style-vite'

3. 组件表格的导出(无样式)

以ant design vue 表格为例,只导出表格内容

<a-table :columns="columns" :dataSource="detaildata" :scroll="{ x: 'max-content',y:700 }" ></table?>
<a-button @click="exportData">导出</a-button>

<script>
   //数据处理为数组
	const transData=(columns, tableList)=> {
       const obj = columns.reduce((acc, cur) => {
         if (!acc.titles && !acc.keys) {
           acc.titles = [];
           acc.keys = [];
         }
         acc.titles.push(cur.title);
         acc.keys.push(cur.dataIndex);
         return acc;
       }, {});
       const tableBody = tableList.map((item,i) => {
         return obj.keys.map((key,index) => item[key]);
       });
       return [ obj.titles, ...tableBody ];
    }
     const exportData=()=>{
          const tableData = transData(
              columns.value,
              detaildata.value
          );
          // 将数据数组转换为工作表
          const ws = XLSX.utils.aoa_to_sheet(tableData);
          // 创建 workbook
          const wb = XLSX.utils.book_new();
          ws['!ref'] = `A1:AI${tableData.length}`;
          //设置列宽
          ws["!cols"] = [
            {wpx: 120}, 
            {wpx: 100},
            {wpx: 110},
            {wpx: 110},];
          //合并单元格
          ws['!merges'] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 1 } }]
          // 将 工作表 添加到 workbook
          XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
          // 将 workbook 写入文件
          XLSX.writeFile(wb, 'tablename.xlsx');
  }
</script>

3. 自定义表格的导出 (div拼成的表格)

比如这种前端拼成的,又附带各种样式的表格
vue3 xlsx-style,vue,插件,前端,excel,vue
一些常用的格式:
(1):合并单元格
(2):列宽
(3):背景色
(4):字体相关-大小粗细颜色字体等
(5):表格线,边框
详细的格式可以参考:
https://www.jianshu.com/p/869375439fee
https://www.npmjs.com/package/xlsx-style

数据处理就不写了,数据处理为数组就可以了
const toExcel=()=>{
	const data = [
	        ['左上表头','','','右上',''],
	        ['标题1','','','',''],
	        ['标题','测试合并','','',''],
	        ['固定标题','123','123','',''],
	        ['左下表头','','','右下',''],
			['2021','¥28337','测试数据','北京','黑龙江'],
			......
	    ]
	const worksheet = XLSX.utils.aoa_to_sheet([headers, ...data])
	const workbook = XLSX.utils.book_new()
	worksheet['!ref'] = `A1:AI${data.length}`
	
	//列宽 按excel的列顺序排列,对应A列,B列, C列......
	worksheet["!cols"] = [
	  {wpx: 200}, 
	  {wpx: 80},
	  {wpx: 80},
	  {wpx: 110}, 
	  {wpx: 110},
	];
	
	/* 
	合并单元格 默认合并当前格的右侧格子
	{ s: { r: 0, c: 0 }, e: { r: 0, c: 1 } }
	A1 与 B1 合并 内容为 A1 的内容
	
	s:start 合并开始 e:end 合并结束
	r:row 行 c:col 列 
	*/
	
	worksheet['!merges'] = [
	  { s: { r: 0, c: 0 }, e: { r: 0, c: 1 } },
	  { s: { r: 0, c: 4 }, e: { r: 0, c: 5 } },
	  { s: { r: 4, c: 0 }, e: { r: 4, c: 1 } },
	  ......
	];
	
	//表格详细样式
	for (let key in worksheet) {
	   if (key == '!ref' || key == '!merges' || key == '!cols' || key == '!rows') {
	     continue
	   } else {
		 //通过key值来选择筛选想要的设置样式的单元格
	     if (key.substring(1)=='1'||key.substring(1)=='5'|| key == 'A2') {
	        worksheet[key].s = { // 设置单元格样式
	            fill: { // 设置背景色
	              fgColor: { rgb: 'F2F3F7' },
	            },
	            font: { // 设置字体
	              name: '等线', // 字体名称
	              sz: 16, // 字体大小
	              bold: true, // 字体是否加粗
	              color:{ //字体颜色
	                    rgb:'ed263d'
	               }
	            },
	            border:{ //设置边框
	              top: {
	                  style: 'thin',
	                  color:{
	                      rgb:'e5e7eb'
	                  }
	              },
	              bottom: {
	                  style: 'thin',
	                  color:{
	                      rgb:'e5e7eb'
	                  }
	              }
	          },
	          alignment: {
	            horizontal: 'center', // 横向(向左、向右、居中)
	            vertical: 'center', // 纵向(向上、向下、居中)
	            wrapText: true, // 设置单元格自动换行,目前仅对非合并单元格生效
	            indent: 0 // 设置单元格缩进
	          }
	        }
	     }else if(key == 'B1'){
	     	......
	     }
	   }
	}
	
	XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
	const tmpDown = new Blob([
	    s2ab(
	    XLSX_STYLE.write(workbook, {
	        bookType: 'xlsx',
	        bookSST: false,
	        type: 'binary',
	        cellStyles: true,
	    })
	    ),
	])
	downloadExcelFile(tmpDown, 'excelname' + '.xlsx')
}

/*用到的方法*/
export function s2ab(s) {
  if (typeof ArrayBuffer !== 'undefined') {
    const buf = new ArrayBuffer(s.length)
    const view = new Uint8Array(buf);
    for (let i = 0; i != s.length; ++i) {
      view[i] = s.charCodeAt(i) & 0xff
    }
    return buf
  } else {
    const buf = new Array(s.length)
    for (let i = 0; i != s.length; ++i) {
      buf[i] = s.charCodeAt(i) & 0xff
    }
    return buf
  }
}

/**
 * 使用 a 标签下载文件
 */
export function downloadExcelFile(obj, fileName){
  const a_node = document.createElement('a')
  a_node.download = fileName
  if ('msSaveOrOpenBlob' in navigator) {
    window.navigator.msSaveOrOpenBlob(obj, fileName)
  } else {
    a_node.href = URL.createObjectURL(obj)
  }
  a_node.click()
  setTimeout(() => {
    URL.revokeObjectURL(obj)
  }, 2000)
}

参考文章:https://blog.csdn.net/Cai181191/article/details/131130926文章来源地址https://www.toymoban.com/news/detail-858956.html

到了这里,关于vue3前端excel导出;组件表格,自定义表格导出;Vue3 + xlsx + xlsx-style的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • vue3 antd项目实战——table表格的自定义筛选【纯前端filters过滤、自定义筛选table表格数据】

    vue3 antd项目实战——table表格的自定义筛选【纯前端filters过滤、自定义筛选table表格数据】

    文章内容 文章链接 vue3 antd table 表格的基础搭建 https://blog.csdn.net/XSL_HR/article/details/128072745 ant design vue 组件库的引入与使用 https://blog.csdn.net/XSL_HR/article/details/127396384 在 后台管理系统 中,我们需要 对大量的数据进行展示、处理和操作 ,table表格也因此无处不在。而 ant design

    2024年01月25日
    浏览(7)
  • vue3 + vite自定义封装vue + element-ui 表格组件,发布到npm包的全过程。

    vue3 + vite自定义封装vue + element-ui 表格组件,发布到npm包的全过程。

    当我们项目中用到的表格太多的话,就会导致我们的代码量一直增加,所以我们要封装一个公共得组件,通过传参引入来使用,下面这篇文章主要给大家介绍了关于vue3+vite自定义封装vue组件发布到npm包的相关资料,需要的朋友可以参考下。 提示我们要安装 create-vite@4.1.0 得依赖

    2024年02月02日
    浏览(6)
  • Vue前端表格导出Excel文件

    Vue前端表格导出Excel文件

    分享一个Vue前端导出Excel文件的方法。记录学习! 功能需求 :将表格的全部数据导出Excel格式的文件 前端 :Vue3+Element-Plus 这个导出方法全部为前端操作,后端只需要传入表格数据到前端即可(基础的多表查询,用的内连接) 2.1 核心方法 将这个导出方法单独封装出来,带一

    2023年04月24日
    浏览(10)
  • vue 前端导出Excel表格(基础版 + 多级标题)纯前端导出

    vue 前端导出Excel表格(基础版 + 多级标题)纯前端导出

    先看效果   1、安装依赖 2、在项目的入口 main.js  引入 3、直接使用 4、完整代码直接复制即可 ------------------------------------分割-------------------------------------------- 1、还是npm下载依赖 2、要新建一个文件,Export2Excel.js 文件,我是从某个网址下载的,我给忘了,这里我直接复制过

    2024年02月12日
    浏览(11)
  • Vue3 导入导出Excel

    Vue3 导入导出Excel

    提供一个 Excel 文件,将里面的内容导出成 JSON 数组 提供一个 JSON 数组,生成 Excel 文件并下载 表格 1. 安装步骤 2.使用 3.导出 导出之后发现数据结构不是我们想要的那种,此时就能通过以下方法转换。 更改列宽 4.导入 如果excel中含有日期,需要解析时间格式的内容。 XLSL.re

    2024年02月14日
    浏览(7)
  • vue3 excel 导出功能

    vue3 excel 导出功能

    1.安装 xlsx 库 2.创建导出函数 src/utils/excelUtils.js 3.在组件中调用导出函数 4.补充: 列名替换成中文

    2024年02月13日
    浏览(5)
  • vue3.2 导出pdf文件或表格数据

    要在Vue 3中导出PDF文件,你可以使用第三方库来处理PDF生成和导出。一个常用的库是jspdf,它允许你在客户端或服务器端生成PDF文档。 以下是在Vue 3中使用jspdf库导出PDF文件的基本步骤: 第一步首先,安装jspdf库。你可以使用npm或yarn来安装它: npm install jspdf --save  或  pnpm in

    2024年02月09日
    浏览(8)
  • 基于VUE3+Layui从头搭建通用后台管理系统(前端篇)八:自定义组件封装上

    基于VUE3+Layui从头搭建通用后台管理系统(前端篇)八:自定义组件封装上

      本章实现一些自定义组件的封装,包括数据字典组件的封装、下拉列表组件封装、复选框单选框组件封装、单选框组件封装、文件上传组件封装、级联选择组件封装、富文本组件封装等。 1. 详细课程地址: https://edu.csdn.net/course/detail/38183 2. 源码下载地址: 点击下载

    2024年02月12日
    浏览(13)
  • vue 实现前端处理 “数组数据“ 转excel格式文件,并导出excel表格

    一、安装插件 XLSX 二、页面引入        希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

    2024年01月18日
    浏览(15)
  • vue3中的excel表导出功能(选中导出或导出所有,也可支持vue2)

    vue3中的excel表导出功能(选中导出或导出所有,也可支持vue2)

    1.安装模块 npm install xlsx file-saver -S 2.文件导入 import * as XLSX from \\\"xlsx\\\"; import FileSaver from \\\"file-saver\\\" 3.整体代码(可选中导出或导出所有) id绑定表格全部导出 4.效果如下        

    2024年02月17日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包