Python(Django)页面导出Excel表格数据
最近做项目要使用到 导出Excel 的表格,正好有 openpyxl 这个库。
今天给大家分享一下如何使用这个库并在 Django 页面导出Excel表;
首先,安装openpyxl库:
pip install openpyxl
现在,我们可以写我们的代码了。
案例:我们以导出病人到医院的挂号信息为例来讲解 openpyxl 的使用;
导入需要用到的库
首先,在自己的视图函数中导入模块,需要使用到如下的三个模块:
from openpyxl import Workbook # 操作Excel的库
from io import BytesIO # 实现了在内存中读写bytes
from django.utils.http import urlquote # 解决导出Excel文件无法使用中文文件名
openpyxl 库是用来用Python代码操作Excel表的库;
BytesIO 可以实现在内存中读写bytes;
urlquote 该方法为了解决导出Excel文件因无法使用中文文件名的问题;
BytesIO
StringIO 操作的只能是 str ,如果要操作二进制数据,就需要使用 BytesIO ;
BytesIO 实现了在内存中读写 bytes ,我们创建一个 BytesIO ,然后写入一些 bytes :
>>> from io import BytesIO
>>> f = BytesIO()
>>> f.write('中文'.encode('utf-8'))
6
>>> print(f.getvalue())
b'\xe4\xb8\xad\xe6\x96\x87'
请注意,写入的不是 str,而是经过 UTF-8 编码的 bytes;
和 StringIO 类似,可以用一个 bytes 初始化 BytesIO ,然后,像读文件一样读取:
>>> from io import BytesIO
>>> f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
>>> f.read()
b'\xe4\xb8\xad\xe6\x96\x87'
小结
StringIO 和 BytesIO 是在内存中操作 str 和 bytes 的方法, 使得和读写文件具有一致的接口。
定义导出函数export_excel
def export_excel(request):
import datetime
from django.http import HttpResponse
from openpyxl import Workbook
from io import BytesIO
from django.utils.http import urlquote
wb = Workbook() # 生成一个工作簿(即一个Excel文件)
wb.encoding = 'utf-8'
sheet1 = wb.active # 获取第一个工作表(sheet1)
sheet1.title =