Files
djangoadmin-wiki/DjangoAdmin_FastAPI_NaiveVue/zh/volume4/tools/excel.md
T
2026-09-12 23:12:15 +08:00

121 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 导入导出
:::tip 说明
基于 `openpyxl` 实现 Excel 导入导出功能,支持通过 `file_template` 模块管理导入模板配置。端点定义在各业务模块的 endpoint 文件中(如 `src/api/v1/endpoints/user.py`)。
:::
## 功能概述
Excel 导入导出是后台管理系统的常见需求,通过 `openpyxl` 库实现:
```
Excel 导出:
1. 将数据库中的数据导出为 Excel 文件,支持自定义表头和格式
2. 适用于生成报表、数据备份等场景
Excel 导入:
1. 将 Excel 文件中的数据导入到数据库,支持批量处理和校验
2. 适用于批量数据录入、数据迁移等场景
```
## 依赖说明
在 `requirements.txt` 中已包含:
```
openpyxl>=3.1.0
```
## 导出实现
导出接口通常在各业务模块的 endpoint 中定义,返回 `StreamingResponse`:
```python
from openpyxl import Workbook
from fastapi.responses import StreamingResponse
import io
@router.get('/export')
@permission_required("sys:user:export")
def export(request: Request):
# 查询数据
data_list = user_service.get_export_data(request)
# 创建工作簿
wb = Workbook()
ws = wb.active
ws.title = "用户信息"
# 写入表头
ws.append(["用户名", "姓名", "手机号", "邮箱", "状态"])
# 写入数据
for item in data_list:
ws.append([item.username, item.realname, item.phone, item.email, item.status_name])
# 返回流式响应
output = io.BytesIO()
wb.save(output)
output.seek(0)
return StreamingResponse(
output,
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
headers={"Content-Disposition": "attachment; filename=export.xlsx"}
)
```
## 导入实现
导入接口接收上传的 Excel 文件,解析后逐行校验并入库:
```python
@router.post('/import')
@permission_required("sys:user:import")
@check_demo
async def import_excel(request: Request, file: UploadFile):
content = await file.read()
wb = load_workbook(io.BytesIO(content))
ws = wb.active
# 跳过表头,逐行解析
for row in ws.iter_rows(min_row=2, values_only=True):
username, realname, phone, email, status = row
# 校验并入库 ...
```
## file_template 模块
`file_template` 模块用于管理导入模板的配置信息,定义模板的字段映射、校验规则等。
模块路径:`src/modules/file_template/`
```
模板配置包含:
- 模板名称
- 关联模块
- 字段映射关系
- 校验规则
```
:::tip 温馨提示
导入时建议先下载模板文件,按模板格式填写数据后再导入,可减少格式错误。
:::
## 错误处理
导入过程中遇到校验错误时,返回详细的错误信息:
```json
{
"code": 1,
"msg": "导入失败:第3行用户名已存在,第5行手机号格式错误",
"data": null,
"ok": false
}
```
## 总结
Excel 导入导出功能基于 `openpyxl` 实现,导出使用 `StreamingResponse` 流式返回避免内存溢出,导入逐行校验并提供详细错误信息。`file_template` 模块可管理导入模板配置,便于维护字段映射和校验规则。