vue到出excel

安装

复制代码
//npm install exceljs
npm install exceljs@4.0.0 --save
npm install file-saver

<template>
  <button @click="dade66">导出 66</button>
</template>

<script>
import ExcelJS from 'exceljs';
import { saveAs } from 'file-saver';

export default {
  data() {
    return {
      data: [
        { name: '张三', age: 25, gender: '男' },
        { name: '李四', age: 30, gender: '女' },
      ],
    };
  },
  methods: {
    async dade66() {
       const workbook = new ExcelJS.Workbook();
	   const worksheet = workbook.addWorksheet('Sheet1');
	   // 设置表头
	   worksheet.columns = [
		{ header: '姓名', key: 'name' },
		{ header: '年龄', key: 'age' },
		{ header: '性别', key: 'gender' },
	   ];
	   // 添加数据
	   this.data.forEach(item => {
		worksheet.addRow({ name: item.name, age: item.age, gender: item.gender });
	   });
	   // 生成 Excel 文件并保存
	   await workbook.xlsx.writeBuffer().then(buffer => {
		const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
		saveAs(blob, 'exported_data.xlsx');
	   });
    },
  },
};
</script>

复制代码
<template>
  <button @click="dade66">导出 66</button>
</template>

<script>
// npm install exceljs
// npm install file-saver
import ExcelJS from 'exceljs';
import { saveAs } from 'file-saver';

export default {
  data() {
    return {
      data: [
        { name: '张三', age: 25, gender: '男' },
        { name: '李四', age: 30, gender: '女' },
      ],
    };
  },
  methods: {
    async dade66() {
        const workbook = new ExcelJS.Workbook();
	    const worksheet = workbook.addWorksheet('Sheet1');
	    // 设置表头
	    worksheet.columns = [
		 { header: '姓名', key: 'name' },
		 { header: '年龄', key: 'age' },
		 { header: '性别', key: 'gender' },
	    ];
	    // 添加数据
	    this.data.forEach(item => {
		 worksheet.addRow({ name: item.name, age: item.age, gender: item.gender });
	    });
	   
	   
	    // 冻结表头(第一行)
		worksheet.views = [{state: 'frozen',ySplit: 1}];
		
	    // 设置列宽
	    worksheet.getColumn(1).width = 15; // 假设设置第一列(姓名列)宽度为 15
	    worksheet.getColumn(2).width = 10; // 假设设置第二列(年龄列)宽度为 10
	    worksheet.getColumn(3).width = 10; // 假设设置第三列(性别列)宽度为 10
	   
	    // 设置行高
		worksheet.getRow(1).height = 18; // 设置第一行(表头行)高度为 25
		worksheet.eachRow((row, rowNumber) => {
		   if (rowNumber > 1) {
			 row.height = 18; // 设置数据行高度为 20
		   }
		});
		
	    // 设置居中对齐
		for (let rowNumber = 1; rowNumber <= worksheet.rowCount; rowNumber++) {
			const row = worksheet.getRow(rowNumber);
			for (let columnNumber = 1; columnNumber <= worksheet.columnCount; columnNumber++) {
			  const cell = row.getCell(columnNumber);
			  cell.alignment = { vertical: 'middle', horizontal: 'center' };
			}
		}
		
		// 合并单元格
		worksheet.mergeCells('A5:C5'); // 合并第一行的 A 到 C 列
		worksheet.mergeCells('A6:C7'); // 跨行合并
	   
	    // 生成 Excel 文件并保存
	    await workbook.xlsx.writeBuffer().then(buffer => {
		 const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
		 saveAs(blob, 'exported_data.xlsx');
	    });
    },
  },
};
</script>
相关推荐
JIngJaneIL7 小时前
篮球论坛|基于SprinBoot+vue的篮球论坛系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·篮球论坛系统
程序猿阿伟8 小时前
《首屏加载优化手册:Vue3+Element Plus项目提速的技术细节》
前端·javascript·vue.js
麦麦大数据9 小时前
D030知识图谱科研文献论文推荐系统vue+django+Neo4j的知识图谱|论文本文相似度推荐|协同过滤
vue.js·爬虫·django·知识图谱·科研·论文文献·相似度推荐
尘觉9 小时前
面试-浅复制和深复制?怎样实现深复制详细解答
javascript·面试·职场和发展
fruge10 小时前
Vue Pinia 状态管理实战指南
前端·vue.js·ubuntu
绝无仅有10 小时前
某教育大厂面试题解析:MySQL索引、Redis缓存、Dubbo负载均衡等
vue.js·后端·面试
chxii11 小时前
ISO 8601日期时间标准及其在JavaScript、SQLite与MySQL中的应用解析
开发语言·javascript·数据库
没逛够11 小时前
Vue 自适应高度表格
javascript·vue.js·elementui
苹果醋313 小时前
JAVA面试汇总(二)多线程(五)
运维·vue.js·spring boot·nginx·课程设计
咖啡の猫13 小时前
Vue初始化脚手架
前端·javascript·vue.js