Django2.1实现数据导出Excel
需求
将数据库内的数据按照规则排序导出为Excel;
数据列要按指定顺序排列,列名替换为中文。
在Python环境下操作Excel的模块有 xlrd,xlwt 和 pandas 等
xlrd只支持对Excel文件格式为xls文件的读取
xlwt只支持对Excel文件格式为xls文件的写入
pandas支持对多种格式文件的读取和写入
因为还在别的地方需要对数据进行处理,所以我选用pandas
欢迎大佬指点,谢谢!
Django数据查询
- 生成数据字典
list_raw = models.storage.objects.values(
'id', 'name', 'sex', 'age', 'birthday', 'phone',
'email', 'address').order_by('age', 'birthday')
这里进行的查询操作会返回一个列表对象。
内容包含所查询的字段内容并按照age和birthday排序
数据示例:
[{'id': 1, 'name': '小明', 'age': '10',,,,,,}, {'id': 2, 'name': '小亮', 'age': '11',,,,,,}……]
这种列表内嵌套字典的形式不仅方便传送给前端解析成数据表格也方便转换成Excel。
数据转换
- 将字典转换为DataFrame
# list() 是为了让query对象转换成数据列表
pf = pd.DataFrame(list(mate_list_raw))
- 设置数据列顺序
order = ['id', 'name', 'sex', 'age', 'birthday',
'phone','email', 'address']
pf = pf[order]
- 替换列名为中文
columns_map = {
'id': '序号',
'name': '姓名',
'sex': '性别',
'age': '年龄',
'birthday': '生日',
'phone': '电话',
'email': '邮箱',
'address': '地址',
}
pf.rename(columns=columns_map, inplace=True)
# 将空的单元格替换为空字符
pf.fillna('', inplace=True)
- 设定文件名和导出路径
filename = 'userinfo.xlsx'
# 这个路径可以在settings中设置也可以直接手动输入
root_path = settings.MEDIA_ROOT + '/fileOutput/'
file_path = os.path.join(root_path, filename)
pf.to_excel(file_path, encoding='utf-8', index=False)