vue3导出表格

亲测有效!可直接拿去使用

因为自己的需求并不是直接给现有的表格导出,只需要自己所需要的数据导出,自己的探索,整理出来的一份,有需要的可直接使用

1、安装

vue-cli版本:3.x+

npm install xlsx -S

2、引入插件

        局部引入

import * as XLSX from 'xlsx'

3、实现

<template>
    <button @click="startExport" type="primary" >导出当前表</button>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import * as XLSX from 'xlsx'
    interface excelType {
	    json: object;
	    name: string;
	    titleArr: string[];
	    sheetName: string;
    }
const titleArr=['id','name','num','student','time']
const tableData=[
    {id:1,name:"小明",num:3,student:"老师",time:new Date()},
    {id:1,name:"小明",num:3,student:"老师",time:new Date()},
    {id:1,name:"小明",num:3,student:"老师",time:new Date()}
]
const startExport = () => {
    exportExcel({
        json: tableData,//数据
        name: '考试计划表',//表名
        titleArr: titleArr,//表头
        sheetName: 'sheet',//页签
    })
}

const exportExcel = (params: excelType) => {
	const keyArray = [];
    let data = [];
	const getLength = function (obj: object) {
		let count = 0;
		for (const i in obj) {
			if (Object.prototype.hasOwnProperty.call(obj, i)) {
				count++;
			}
		}
		return count;
	};

	
    for (const key1 in params.json) {
      if (Object.prototype.hasOwnProperty.call(params.json, key1)) {
        const element = (params.json as { [key: string]: object })[key1];
        const rowDataArray = [];
        for (const key2 in element) {
          if (Object.prototype.hasOwnProperty.call(element, key2)) {
            const element2 = (element as { [key: string]: object })[key2];
            rowDataArray.push(element2);
            if (keyArray.length < getLength(element)) {
              keyArray.push(key2);
            }
          }
        }
        data.push(rowDataArray);
      }
    }
    data.splice(0, 0, keyArray as any, params.titleArr as any);
    console.log(data);
    let ws = XLSX.utils.aoa_to_sheet(data);
    let wb = XLSX.utils.book_new();
	// 隐藏英文字段表头
    const wsrows = [{ hidden: true }];
      /* 设置worksheet每列的最大宽度 */
      const colWidth = data.map((row) =>
        row.map((val) => {
          /* 先判断是否为null/undefined */
          if (val == null) {
            return {
              wch: 20,
            };
          } else if (val.toString().charCodeAt(0) > 255) {
            /* 再判断是否为中文 */
            return {
              wch: val.toString().length * 2,
            };
          } else {
            return {
              wch: val.toString().length*2,
            };
          }
        })
      );
      /* 以第一行为初始值 */
      const 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;
      ws['!rows'] = wsrows; // ws - worksheet
      XLSX.utils.book_append_sheet(wb, ws, params.sheetName);
	/* generate file and send to client */
	XLSX.writeFile(wb, `${params.name}.xlsx`);
};

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3 中,你可以使用一些库来导出 Excel 表格,例如 `xlsx` 或 `exceljs`。下面是使用 `xlsx` 库的示例代码: 1. 首先,安装 `xlsx` 库: ```bash npm install xlsx ``` 2. 在你的 Vue 3 项目中,创建一个导出 Excel 表格的方法: ```vue <template> <div> <button @click="exportExcel">导出Excel</button> </div> </template> <script> import XLSX from 'xlsx'; export default { methods: { exportExcel() { // 创建一个Workbook对象 const workbook = XLSX.utils.book_new(); // 创建一个Worksheet对象 const worksheet = XLSX.utils.json_to_sheet([ { Name: 'John', Age: 25, City: 'New York' }, { Name: 'Mike', Age: 30, City: 'Paris' }, { Name: 'Sarah', Age: 28, City: 'London' } ]); // 将Worksheet添加到Workbook中 XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); // 将Workbook对象转换为二进制数据流 const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); // 创建Blob对象 const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); // 创建下载链接并点击下载 const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'my_excel_file.xlsx'; a.click(); // 释放URL对象 window.URL.revokeObjectURL(url); } } }; </script> ``` 在这个示例代码中,我们使用 `xlsx` 库来创建一个 Excel 文件,并将数据写入到文件中。然后,我们将生成的 Excel 文件通过 Blob 对象创建下载链接,并模拟点击下载链接进行下载。 你可以将这段代码放入你的 Vue 3 组件中,并在需要导出 Excel 表格的地方调用 `exportExcel` 方法。 希望对你有所帮助!如果有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值