目前我了解的python操作excel的模块有xlrd/xlwt和openpyxl,其中xlwt针对Ecxec2007之前的版本,即.xls文件,其要求单个sheet不超过65535行,而openpyxl则主要针对Excel2007之后的版本(.xlsx),它对文件大小没有限制
因为openpyxl的文档更加详细而且其中的操作方法也更加多样,所以我做的项目中用openpyxl来导出excel文件,主要功能是将mysql中的多个表数据导入到一个excel文件中,每一个表放在一个sheet中,并提前在每个sheet中放入对应字段名。
openpyxl文档地址https://openpyxl.readthedocs.io/en/stable/
该文章基于你已经初步了解django,并会使用model,并且已经设置好settings中数据库的设置
废话少数,看代码
def export_views(request):
wb = Workbook() # optimized_write=True
# excel名称基于创建时间命名
sheet_name = 'BLCAdatabase_'+str(time.time()).split('.')[0]+'_'+datetime.datetime.now().strftime('%Y%m%d')
# Basic_Information是我的model中的,你可以根据自己项目更改
basic_obj = Basic_Information.objects.all()
# 第一个sheet就是w1 = wb.create_sheet('sheet名称', 0)
# 第二个sheet就是w2 = wb.create_sheet('sheet名称', 1)以此类推
w1 = wb.create_sheet('基本信息', 0)
# basicname_list是你在每个sheet的第一行插入的信息
basicname_list = ['...']
for i in range(1, len(basicname_list) + 1):
w1.cell(row=1, column=i, value=basicname_list[i - 1])
excel_row = 2
# 导入mysql中的数据
for obj in basic_obj:
pid = obj.pid
...
obj_list = [pid, ...]
for i in range(1, len(basicname_list) + 1):
w1.cell(row=excel_row, column=i, value=obj_list[i - 1])
excel_row += 1
response = HttpResponse(content_type='application/msexcel')
response['Content-Disposition'] = 'attachment;filename=%s.xlsx' % sheet_name
wb.save(response)
return response
最后效果如下:
有问题欢迎讨论,毕竟我也是第一次用openpyxl,但最好先看一下openpyxl的文档