xlsxwriter 簡單用法

安裝

pip install XlsxWriter

或者下載最新版本的,然後安裝

tar -zxvf XlsxWriter-1.2.3.tar.gz
cd XlsxWriter-1.2.3
python setup.py install

簡單使用例子

# xlsxwriter只可以新建一個excel,不可以讀取和更新
# 創建一個workbook 和增加一個worksheet,默認爲sheet1...,也可以直接爲sheet命名,例如下邊的test
workbook = xlsxwriter.Workbook('data.xlsx')
# 添加 sheet
worksheet = workbook.add_worksheet()  # 默認爲 Sheet1.
worksheet1 = workbook.add_worksheet("test")  # test
worksheet2 = workbook.add_worksheet()        # 默認爲 Sheet3.

# 測試數據
expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

# 從首行、首列開始.
row = 0
col = 0

# 通過迭代寫入數據.
for item, cost in (expenses):
    worksheet.write(row, col,     item)
    worksheet.write(row, col + 1, cost)
    row += 1

# 使用公式,例如B列的和.
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')

# 只有此函數纔可以生成excel
workbook.close()

在這裏插入圖片描述

添加格式顯示

顏色查看:Working with Colors
詳情查看:The Format ClassWorkbook ClassWorksheet Class

from datetime import datetime
import xlsxwriter

workbook = xlsxwriter.Workbook('Expenses03.xlsx')
worksheet = workbook.add_worksheet()

# 定義一個紅色+黑體的格式.
bold = workbook.add_format({'bold': 1, "color": "red"})

# 設置錢數的格式.
money_format = workbook.add_format({'num_format': '$#,##0'})

# 設置時間格式.
date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})

# 設置列、行寬.
worksheet.set_column(1, 1, 15)
# worksheet.set_row(1, 1, 15)

# 定義表頭.
worksheet.write('A1', 'Item', bold)
worksheet.write('B1', 'Date', bold)
worksheet.write('C1', 'Cost', bold)

# 測試數據.
expenses = (
    ['Rent', '2013-01-13', 1000],
    ['Gas', '2013-01-14', 100],
    ['Food', '2013-01-16', 300],
    ['Gym', '2013-01-20', 50],
)

# 初始化行列.
row = 1
col = 0

for item, date_str, cost in (expenses):
    # 轉換時間格式.
    date = datetime.strptime(date_str, "%Y-%m-%d")

    worksheet.write_string(row, col, item)
    worksheet.write_datetime(row, col + 1, date, date_format)
    worksheet.write_number(row, col + 2, cost, money_format)
    row += 1

# 使用公式C2到C5的和.
worksheet.write(row, 0, 'Total', bold)
worksheet.write(row, 2, '=SUM(C2:C5)', money_format)

workbook.close()

在這裏插入圖片描述

添加圖表

詳情查看:Working with ChartsThe Chart ClassThe Chartsheet Class

import xlsxwriter

workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()

# 創建一個類型爲column的圖表對象.
chart = workbook.add_chart({'type': 'column'})

# Write some data to add to plot on the chart.
data = [
    [1, 2, 3, 4, 5],
    [2, 4, 6, 8, 10],
    [3, 6, 9, 12, 15],
]

worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])

# 配置chart. 添加數據 series.
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
# chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
# 或者使用一個list添加series(下邊),[sheetname, first_row, first_col, last_row, last_col]
chart.add_series({'values': ['Sheet1', 0, 1, 4, 1], 'line': {'color': 'red'}})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})

# 添加標題(圖表上邊)
chart.set_title({
    'name': 'Title',
})
# 添加x軸標題
chart.set_x_axis({
    'name': 'X axis',
})
# 添加y軸標題
chart.set_y_axis({
    'name': 'y axis',
})
# 圖表下邊插入數據表
chart.set_table()
# 將表插入到worksheet.
worksheet.insert_chart('A7', chart)
workbook.close()

chart的類型:

  • area: 區域(填充線)樣式表.
  • bar: 條形圖樣式(顛倒的直方圖).
  • column: 列樣式(柱狀圖)圖表.
  • line: 線型圖表.
  • pie: 扇形圖表.
  • doughnut: 甜甜圈樣式圖表.
  • scatter: 散點樣式圖表.
  • stock: 股票樣式圖表.
  • radar: 雷達樣式圖表.

也可以添加子類型,支持的子類型如下:

workbook.add_chart({'type': 'bar', 'subtype': 'stacked'})

area(stacked, percent_stacked)
bar( stacked,percent_stacked)
column( stacked,percent_stacked)
scatter(straight_with_markers, straight, smooth_with_markers,smooth)
radar(with_markers,filled)

在這裏插入圖片描述

利用公式

詳情參考:Working with Formulas

worksheet.write_formula('A1', '=10*B1 + C1')

在這裏插入圖片描述

添加過濾

詳情參考:Working with Autofiltersexample

import xlsxwriter
data = [["Region", "Item", "Volume", "Month"],
        ["East", "Apple", 5000, "july"],
        ["west", "Grape", 7000, "December"],
        ["East", "orange", 4000, "October"],
        ["East", "Grape", 7000, "October"],
        ["East", "Apple", 4000, "April"],
        ["East", "Grape", 6000, "February"],
        ["South", "orange", 3000, "November"],
        ["West", "Grape", 2000, "October"],
        ["East", "Apple", 4000, "April"],
        ["North", "Grape", 6000, "February"],
        ]

workbook = xlsxwriter.Workbook('autofilter.xlsx')

# 添加不同的sheet.
worksheet1 = workbook.add_worksheet()
worksheet2 = workbook.add_worksheet()
worksheet3 = workbook.add_worksheet()
worksheet4 = workbook.add_worksheet()

# header格式.
bold = workbook.add_format({'bold': 1})

headers = data[0]
# 添加表頭,爲每個sheet.
for worksheet in (workbook.worksheets()):
    # 列寬.
    worksheet.set_column('A:D', 12)
    # 行高.
    worksheet.set_row(0, 20, bold)
    worksheet.write_row('A1', headers)
worksheet1.autofilter('A1:D51')
# worksheet1.autofilter(0, 0, 10, 3)  # 和上邊的作用一樣,不同寫法.

row = 1
for row_data in (data[1:]):
    worksheet1.write_row(row, 0, row_data)
    row += 1
    
# ************************sheet2******************************
worksheet2.autofilter(0, 0, 50, 3)
# 添加過濾,Region等於East的
worksheet2.filter_column(0, 'Region == East')

# 隱藏其餘的.
row = 1
for row_data in (data[1:]):
    region = row_data[0]
    if region == 'East':
        pass
    else:
        worksheet2.set_row(row, options={'hidden': True})
    worksheet2.write_row(row, 0, row_data)
    row += 1

# **********************sheet3***********************
worksheet3.autofilter('A1:D51')
worksheet3.filter_column('A', 'x == East or x == South')
row = 1
for row_data in (data[1:]):
    region = row_data[0]
    if region == 'East' or region == 'South':
        pass
    else:
        worksheet3.set_row(row, options={'hidden': True})
    worksheet3.write_row(row, 0, row_data)
    row += 1
    
# ********************sheet4 ***********************
worksheet4.autofilter('A1:D51')
worksheet4.filter_column('A', 'x == East')
worksheet4.filter_column('C', 'x > 3000 and x < 8000')
row = 1
for row_data in (data[1:]):
    region = row_data[0]
    volume = int(row_data[2])
    if region == 'East' and volume > 3000 and volume < 8000:
        pass
    else:
        worksheet4.set_row(row, options={'hidden': True})
    worksheet4.write_row(row, 0, row_data)
    row += 1
workbook.close()

在這裏插入圖片描述
在這裏插入圖片描述

數據驗證

詳情參考:Working with Data Validation

條件格式

詳情參考:Working with Conditional Formatting

import xlsxwriter
data = [["Region", "Item", "Volume", "Month"],
        ["East", "Apple", 5000, "july"],
        ["west", "Grape", 7000, "December"],
        ["East", "orange", 4000, "October"],
        ["East", "Grape", 7000, "October"],
        ["East", "Apple", 4000, "April"],
        ["East", "Grape", 6000, "February"],
        ["South", "orange", 3000, "November"],
        ["West", "Grape", 2000, "October"],
        ["East", "Apple", 4000, "April"],
        ["North", "Grape", 6000, "February"],
        ]

workbook = xlsxwriter.Workbook('autofilter.xlsx')

# 添加不同的sheet.
worksheet1 = workbook.add_worksheet()

# header格式.
bold = workbook.add_format({'bold': 1})

headers = data[0]
# 列寬.
worksheet1.set_column('A:D', 12)
# 行高.
worksheet1.set_row(0, 20, bold)
worksheet1.write_row('A1', headers)
worksheet1.autofilter('A1:D51')
# worksheet1.autofilter(0, 0, 10, 3)  # 和上邊的作用一樣,不同寫法.

row = 1
for row_data in (data[1:]):
    worksheet1.write_row(row, 0, row_data)
    row += 1
format1 = workbook.add_format({'bg_color':   '#FFC7CE',
                               'font_color': '#9C0006'})
format2 = workbook.add_format({'bg_color':   '#FFEB9C',
                               'font_color': '#9C6500'})

worksheet1.conditional_format('C2:C10', {'type':     'cell',
                                        'criteria': '>=',
                                        'value':    5000,
                                        'format':   format1})
worksheet1.conditional_format('C2:C10', {'type':     'cell',
                                        'criteria': '<=',
                                        'value':    3000,
                                        'format':   format2})

workbook.close()

在這裏插入圖片描述

添加表格

詳情參考:Working with Worksheet Tables

當處於’constant_memory’ 模式時,Table不可用

import xlsxwriter
data = [
    ['Apples', 10000, 5000, 8000, 6000],
    ['Pears',   2000, 3000, 4000, 5000],
    ['Bananas', 6000, 6000, 6500, 6000],
    ['Oranges',  500,  300,  200,  700]]
workbook = xlsxwriter.Workbook('tables.xlsx')
worksheet = workbook.add_worksheet()
worksheet1 = workbook.add_worksheet()

# sheet1
worksheet.set_column('B:G', 12)
formula = r'=SUM(Table1[@[Quarter 1]:[Quarter 4]])'
worksheet.add_table('B3:G7', {'data': data,
                              'columns': [{'header': 'Product'},
                                          {'header': 'Quarter 1'},
                                          {'header': 'Quarter 2'},
                                          {'header': 'Quarter 3'},
                                          {'header': 'Quarter 4'},
                                          {'header': 'Year', 'formula': formula},
                                          ]})

# sheet 2
options = {'data': data,
           'total_row': 1,
           'columns': [{'header': 'Product', 'total_string': 'Totals'},
                       {'header': 'Quarter 1', 'total_function': 'sum'},
                       {'header': 'Quarter 2', 'total_function': 'sum'},
                       {'header': 'Quarter 3', 'total_function': 'sum'},
                       {'header': 'Quarter 4', 'total_function': 'sum'},
                       {'header': 'Year',
                        'formula': '=SUM(Table2[@[Quarter 1]:[Quarter 4]])',
                        'total_function': 'sum'
                        },
                       ]}
# Add a table to the worksheet.
worksheet1.add_table('B3:G8', options)
workbook.close()

在這裏插入圖片描述
在這裏插入圖片描述

pandas 利用xlsxwriter引擎

詳情參考:Working with Python Pandas and XlsxWriter

import pandas as pd
# Create a Pandas dataframe from the data.
df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')
# Close the Pandas Excel writer and output the Excel file.
writer.save()

在這裏插入圖片描述

性能

詳情參考:Working with Memory and Performance

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章