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)