EasyExcel使用模板填充数据导出遇到的坑

本文介绍了在使用阿里EasyExcel框架进行Excel模板填充数据导出时遇到的两个主要问题:1) EasyExcel默认支持xlsx格式,选择xls模板会导致异常,但可通过设置文件类型避免;2) 直接修改模板文件格式可能使EasyExcel无法识别,建议使用文件另存为方式修改。这些问题可能导致`CreateWorkbookFailure`异常,合理操作能有效解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EasyExcel使用模板填充数据导出遇到的坑


1.最近需求涉及excel的导出,所以选择用阿里的EasyExcel框架来使用是比较方便的,这个框架封装了许多方法来供我们使用,比传统POI简单许多
2.因为就是需求涉及所导出的excel表的文件类型要后续用于别的第三方系统进行导入,避免文件类型问题我选择就是通过原本的模板进行模板填充数据导出.
3.以下是遇到的坑:
3.1在选择模板的时候一定要注意excel的文件格式.因为EasyExcel默认读取格式是xlsx,所以选择xls会 导致异常也就是create workbook failure,但是如果非要是xls的格式的模板也可以避免这种异常也就是,在进行读模板的时候设置好excel的文件类型
在这里插入图片描述
3.2切记修改模板文件类型格式不要直接修改,这样修改的话EasyExcel也是无法识别类型的,最好使用文件另存为修改,不然也会导致就是create workbook failure

异常图片如下:
在这里插入图片描述

以下是使用EasyExcel下载模板文件并填充数据导出的示例代码: ```python import os import time import uuid import pymysql import requests import pandas as pd from django.http import HttpResponse from django.conf import settings import openpyxl from openpyxl.utils import get_column_letter from openpyxl.styles import Alignment from openpyxl.worksheet.datavalidation import DataValidation import easyexcel # 从数据库中获取数据 def get_data_from_db(): conn = pymysql.connect(host='localhost', user='root', password='123456', db='test', charset='utf8') cursor = conn.cursor() sql = 'SELECT * FROM student' cursor.execute(sql) data = cursor.fetchall() cursor.close() conn.close() return data # 下载模板文件 def download_template_file(): url = 'http://example.com/template.xlsx' response = requests.get(url) file_name = str(uuid.uuid4()) + '.xlsx' file_path = os.path.join(settings.MEDIA_ROOT, file_name) with open(file_path, 'wb') as f: f.write(response.content) return file_path # 填充数据模板文件 def fill_data_to_template_file(file_path, data): wb = openpyxl.load_workbook(file_path) ws = wb.active # 填充数据 for row, row_data in enumerate(data, start=2): for col, cell_data in enumerate(row_data, start=1): cell = ws.cell(row=row, column=col) cell.value = cell_data # 设置单元格样式 for col in range(1, len(data[0]) + 1): column_letter = get_column_letter(col) ws.column_dimensions[column_letter].width = 20 for row in range(1, len(data) + 2): cell = ws.cell(row=row, column=col) cell.alignment = Alignment(horizontal='center', vertical='center') # 设置数据有效性 dv = DataValidation(type="list", formula1='"男,女"', allow_blank=True) ws.add_data_validation(dv) dv.add('D2:D100') # 合并单元格 ws.merge_cells('A1:E1') # 保存文件 wb.save(file_path) # 导出Excel文件 def export_excel_file(file_path): file_name = 'export_' + time.strftime('%Y%m%d%H%M%S') + '.xlsx' response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename={}'.format(file_name) easyexcel.write(response, file_path) os.remove(file_path) return response # 下载模板文件并填充数据导出 def download_and_export(request): data = get_data_from_db() file_path = download_template_file() fill_data_to_template_file(file_path, data) response = export_excel_file(file_path) return response ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值