Django+ openpyxl 導出文件,設置表頭/內容格式


之前使用xlrd、xlrt處理文件的導入導出,這兩個主要用於excel2003格式的文件的讀寫,並且xlrt最多可以寫入256行,大於256行會報錯
找了新插件openpyxl,對它找到針對某一行設置大小和對齊方式的方法,使用了下面的笨辦法
官網:
https://openpyxl.readthedocs.io/en/stable/styles.html#cell-styles-and-named-styles

from openpyxl import Workbook
from openpyxl.styles import Alignment,Font,colors
def export(request,sql,sheet_name):
wb = Workbook() #optimized_write=True
# 創建一個sheet
w = wb.create_sheet(sheet_name, 0)

# 創建連接
connection = pymysql.connect(**config)
try:
with connection.cursor() as cursor:
# 執行sql語句,插入記錄
cursor.execute(sql);
results = cursor.fetchall()
# 沒有設置默認自動提交,需要主動提交,以保存所執行的語句
connection.commit()
finally:
connection.close();
resultslist = list(results)

i = 1
for k, v in resultslist[0].items():
w.cell(row=1, column=i).value = k.replace("t_", "").replace("F_", "")
s = chr(i + 64) + str(1)
w[s].alignment = Alignment(horizontal='center', vertical='center')
w[s].font = Font(size=18, bold=True)
w.column_dimensions[chr(i + 64)].width = 35
i = i + 1
excel_row = 2
# 寫入數據
for i in range(0, len(resultslist)):
excel_col = 1
for k, v in resultslist[i].items():
w.cell(row=excel_row, column=excel_col).value = v
s=chr(excel_col+64)+str(excel_row)
w[s].alignment= Alignment(horizontal='center', vertical='center')
w[s].font = Font(size=16)
excel_col = excel_col +1
excel_row = excel_row + 1

exist_file = os.path.exists("%s.xlsx" %sheet_name)
if exist_file:
os.remove("%s.xlsx" %sheet_name)

response = HttpResponse(content_type='application/msexcel')
response['Content-Disposition'] = 'attachment;filename=%s.xlsx' % sheet_name
wb.save(response)
return response


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM