介紹
Xlsx是python用來構造xlsx文件的模塊,可以向excel2007+中寫text,numbers,formulas 公式以及hyperlinks超鏈接。
可以完成xlsx文件的自動化構造,包括:
合並單元格,制作excel圖表等功能:
xlsxWriter支持多種excle功能;與excel完美兼容;寫大文件,速度快且只占用很小的內存空間
不支持讀或者改現有的excel文件
安裝
pip install XlsxWriter
文檔
https://xlsxwriter.readthedocs.io/contents.html
使用
import xlsxwriter # Create a workbook and add a worksheet. workbook = xlsxwriter.Workbook('Expenses02.xlsx') worksheet = workbook.add_worksheet() # Add a bold format to use to highlight cells. bold = workbook.add_format({'bold': True}) # Add a number format for cells with money. money = workbook.add_format({'num_format': '$#,##0'}) # Write some data headers. worksheet.write('A1', 'Item', bold) worksheet.write('B1', 'Cost', bold) # Some data we want to write to the worksheet. expenses = ( ['Rent', 1000], ['Gas', 100], ['Food', 300], ['Gym', 50], ) # Start from the first cell below the headers. row = 1 col = 0 # Iterate over the data and write it out row by row. for item, cost in (expenses): worksheet.write(row, col, item) worksheet.write(row, col + 1, cost, money) row += 1 # Write a total using a formula. worksheet.write(row, 0, 'Total', bold) worksheet.write(row, 1, '=SUM(B2:B5)', money) workbook.close()
實例演示
寫一個訂單的demo
import xlsxwriter import time import datetime workbook = xlsxwriter.Workbook('demo.xlsx', {'constant_memory': True}) # 新建excel表 worksheet = workbook.add_worksheet('訂單信息') # 新建sheet(sheet的名稱為"訂單信息") headings = ['訂單編號', '付款時間', '訂單人', '訂單金額', '送貨地址'] # 設置表頭 expenses = [ ['2020022921571600005', '2020-02-29 21:57:16', '張三', '5.00', '北京三里屯'], ['2020022920451600004', '2020-02-29 20:45:15', '李四', '25.80', '北京大望路'], ['2020022920451600035', '2020-03-29 19:45:15', '王五', '200.80', '北京清河'], ] # 標簽頭格式 head_format = workbook.add_format({ 'bold': True, # 字體加粗 'border': 1, # 單元格邊框寬度 'align': 'center', # 對齊方式 'valign': 'vcenter', # 字體對齊方式 'fg_color': '#CBCBFF', # 單元格背景顏色 'font_size': 12 # 字體大小 }) money_format = workbook.add_format( {'num_format': '#,##0.00', 'font_size': 10}) # 金錢格式 date_format = workbook.add_format( {'num_format': 'yyyy-mm-dd hh:mm:ss', 'font_size': 10}) # 時間格式 normal_fomat = workbook.add_format({'font_size': 10}) # 普通格式 # currency_format = workbook.add_format({'num_format': '#,##0.00'}) worksheet.set_column(0, len(headings) - 1, width=30) # 設置單元格寬度 # 寫表頭 for index, val in enumerate(headings): worksheet.write(0, index, val, head_format) # Start from the first cell below the headers. row = 1 col = 0 # 寫數據 for item, date_str, person, cost, addr in (expenses): # Convert the date string into a datetime object. # date = datetime.datetime.now() #mktime(time.strptime(date_str, "%Y-%m-%d # %H:%M:%S")) date = datetime.datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S") num = float(cost) worksheet.write_string(row, col, item, normal_fomat) worksheet.write_datetime(row, col + 1, date, date_format) worksheet.write_string(row, col + 2, person, normal_fomat) worksheet.write_number(row, col + 3, num, money_format) worksheet.write_string(row, col + 4, addr, normal_fomat) row += 1 # 設置文本區格式 options = { 'width': 256, 'height': 50, 'x_offset': 10, 'y_offset': 10, 'font': {'color': 'red', 'size': 14}, 'align': {'vertical': 'middle', 'horizontal': 'center' }, # 'gradient': {'colors': ['#DDEBCF', # '#9CB86E', # '#156B13']}, } # 插入文本區 worksheet.insert_textbox(row+1,col+1, '“訂單明細”工作表查看商品詳情', options) worksheet = workbook.add_worksheet('商品詳情') # 新建sheet(sheet的名稱為"商品詳情") workbook.close()
在Flask中運用
@route_member.route("/export", methods=['GET']) def export_records(): """ excel導出 :return: """ output = write_records() resp = make_response(output.getvalue()) resp.headers["Content-Disposition"] = "attachment; filename=export_member%s.xlsx" %(getStrDate()+str(random.randint( 0,9999 ))) resp.headers['Content-Type'] = 'application/x-xlsx' return resp def write_records(): """ 寫excel數據 :return: """ query_sets = Member.query.order_by(Member.id.desc()).all() column_names = ['姓名', '性別', '狀態'] data_col = ['nickname', 'sex_desc', 'status_desc'] excel_data = make_excel_list(query_sets, data_col) # app.logger.info(excel_data) # 創建數據流 output = BytesIO() # 創建excel work book writer = pd.ExcelWriter(output, engine='xlsxwriter') workbook = writer.book # 創建excel sheet worksheet = workbook.add_worksheet('會員表') # 標簽頭格式 head_format = workbook.add_format({ 'bold': True, # 字體加粗 'border': 1, # 單元格邊框寬度 'align': 'center', # 對齊方式 'valign': 'vcenter', # 字體對齊方式 'fg_color': '#CBCBFF', # 單元格背景顏色 'font_size': 12 # 字體大小 }) normal_fomat = workbook.add_format({'font_size': 10}) # 普通格式 worksheet.set_column(0, len(column_names) - 1, width=30) # 設置單元格寬度 col = 0 row = 1 # 寫入列名 for item in column_names: worksheet.write(0, col, item, head_format) col += 1 # 寫數據 col = 0 for nickname, sex_desc, status_desc in (excel_data): worksheet.write_string(row, col, nickname, normal_fomat) worksheet.write_string(row, col+1, sex_desc, normal_fomat) worksheet.write_string(row, col+2, status_desc, normal_fomat) row += 1 writer.close() output.seek(0) return output