前言
- 導出數據寫入ececl的方法有很多種,隨個人喜好選擇,可以采用保存文件的方式,也可以采用流方式。
- 重點在於要更改響應頭類型使其支持中文名稱輸出
代碼實現
@api.route('/download')
def download():
data = Case.query.filter_by().all()
# 創建IO對象
output = BytesIO()
# 寫excel
workbook = xlsxwriter.Workbook(output) # 先創建一個book,直接寫到io中
sheet = workbook.add_worksheet('sheet1')
fileds = ['用例編號', '測試項', '測試分項', '測試點', '前置條件',
'測試方法和步驟', '預期結果', '是否通過', '實際結果',
'設計日期', '結論日期', '測試人員']
# 寫入數據到A1一列
sheet.write_row('A1', fileds)
# 遍歷有多少行數據
for i in range(len(data)):
# 遍歷有多少列數據
for x in range(len(fileds)):
key = [key for key in data[i].keys()]
sheet.write(i + 1, x, data[i][key[x]])
log.info('當前行:{} 當前列:{} 數據:{}'.format(str(i), str(x), data[i][key[x]]))
workbook.close() # 需要關閉
output.seek(0) # 找到流的起始位置
resp = make_response(output.getvalue())
basename = '測試用例.xlsx'
# 轉碼,支持中文名稱
resp.headers["Content-Disposition"] = "attachment; filename*=UTF-8''{utf_filename}".format(
utf_filename=quote(basename.encode('utf-8'))
)
resp.headers['Content-Type'] = 'application/x-xlsx'
return resp