vue3实现excel文件导出
时间: 2025-03-25 22:17:15 浏览: 61
### Vue3 中实现 Excel 文件导出的功能
在 Vue3 项目中,可以通过多种方式实现 Excel 文件的导出功能。以下是几种常见的方法及其原理:
#### 方法一:使用 `exceljs` 库
`exceljs` 是一个强大的 JavaScript 库,支持创建复杂的 Excel 工作簿、工作表以及样式化单元格等功能。通过安装该库并将其集成到 Vue3 项目中,可以轻松实现出带样式的 Excel 文件。
1. **安装依赖**
使用 npm 或 yarn 安装 `exceljs` 和用于下载文件的辅助工具 `file-saver`:
```bash
npm install exceljs file-saver
```
2. **编写导出逻辑**
下面是一个简单的例子,展示如何利用 `exceljs` 创建并导出 Excel 文件:
```javascript
import { Workbook } from 'exceljs';
import * as fs from 'file-saver';
export function exportExcel() {
const workbook = new Workbook(); // 创建一个新的工作簿实例
const worksheet = workbook.addWorksheet('Sheet Name'); // 添加一张新工作表
// 向工作表写入数据
worksheet.columns = [
{ header: 'ID', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 30 }
];
worksheet.addRow({ id: 1, name: 'Alice' });
worksheet.addRow({ id: 2, name: 'Bob' });
// 将工作簿保存为二进制流
workbook.xlsx.writeBuffer().then((buffer) => {
const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
fs.saveAs(blob, 'example.xlsx');
}).catch(err => console.error(err));
}
```
这段代码展示了如何定义列结构并将数据逐行添加至工作表中[^1]。
---
#### 方法二:使用 `xlsx` 和 `file-saver`
另一种常用的方式是借助 `xlsx` 来生成 Excel 数据,并结合 `file-saver` 提供浏览器中的文件存储能力。
1. **安装依赖**
```bash
npm install xlsx file-saver
```
2. **编写导出逻辑**
下面的例子演示了如何将二维数组转换为 Excel 文件并触发下载:
```javascript
import XLSX from 'xlsx';
import * as FileSaver from 'file-saver';
export function exportToExcel(data, fileName) {
const ws = XLSX.utils.json_to_sheet(data); // 转换 JSON 数组为工作表对象
const wb = XLSX.utils.book_new(); // 创建新的工作簿
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); // 将工作表附加到工作簿上
// 导出 Excel 并保存为本地文件
XLSX.writeFile(wb, `${fileName}.xlsx`);
}
// 示例调用
const data = [{ id: 1, name: 'John Doe' }, { id: 2, name: 'Jane Smith' }];
exportToExcel(data, 'test-file');
```
此处的关键在于将 JSON 格式的数据转化为适合 `xlsx` 的工作表格式][^[^45]。
---
#### 方法三:基于 HTML 表格直接导出
对于简单场景下已经渲染好的表格数据,可以直接提取 DOM 结构并通过脚本转为 Excel 文件。
1. **HTML 部分**
假设有一个已存在的 `<table>` 元素:
```html
<table id="exportTable">
<tr>
<th>ID</th><th>Name</th>
</tr>
<tr>
<td>1</td><td>Alice</td>
</tr>
<tr>
<td>2</td><td>Bob</td>
</tr>
</table>
```
2. **JavaScript 实现**
利用原生 DOM API 获取表格内容并构建 Excel 文件:
```javascript
function tableExport() {
let tableElement = document.getElementById('exportTable');
let htmlContent = tableElement.outerHTML;
// 构造 MIME 类型以便兼容大多数浏览器
let uri = 'data:application/vnd.ms-excel;base64,';
let template = '<html xmlns:o="urn:schemas-microsoft-com:office:spreadsheet"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>';
let base64 = (s) => window.btoa(unescape(encodeURIComponent(s)));
let format = (templateStr, contentObj) => templateStr.replace(/\{(\w+)\}/g, (_, p) => contentObj[p]);
let linkHref = uri + base64(format(template, { worksheet: '', table: htmlContent }));
let downloadLink = document.createElement("a");
document.body.appendChild(downloadLink);
downloadLink.href = linkHref;
downloadLink.download = 'exported_table.xls'; // 设置文件名
downloadLink.click();
document.body.removeChild(downloadLink);
}
```
上述代码片段实现了从页面上的现有表格快速生成 Excel 文件的需求[^3]。
---
#### 总结
上述三种方法各有优劣,开发者可以根据实际业务需求选择最合适的方案。如果需要高度自定义的工作簿或者复杂样式,则推荐采用 `exceljs`;而对于轻量级的应用来说,`xlsx` 可能更加便捷易用。而当目标仅仅是把现有的 HTML 表格导出时,第三种方法无疑是最简洁高效的解决方案之一。
阅读全文
相关推荐


















