1. 程式人生 > 實用技巧 >Python 模組:XlsxWriter 的使用

Python 模組:XlsxWriter 的使用

一、安裝 XlsxWriter

使用命令:

pip3 install xlsxwriter

二、驗證是否安裝成功

新建一個 .py 檔案,輸入下面程式碼:

import xlsxwriter

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

worksheet.write('A1', 'Hello world')

workbook.close()

執行程式,會發現同級目錄下生成了一個 hello.xlsx 檔案:

開啟 hello.xlsx 檔案,發現內容如下,表示安裝成功:

三、建立一個簡單的 XLSX 檔案

假設我們有一些月度支出的資料,我們希望將其轉換為 Excel XLSX 檔案:

expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

下面是程式碼:

import xlsxwriter

# Create a workbook and add a worksheet.
# 建立一個工作簿並新增一張工作表
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()

# Some data we want to write to the worksheet.
# 想寫入工作表的資料
expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

# Start from the first cell. Rows and columns are zero indexed.
# 從第一個單元格開始,行和列的索引均為 0
row = 0
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)
    row += 1

# Write a total using a formula.
# 寫一個計算出總和的公式
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')

workbook.close()

執行程式,看到生成了 Expenses01.xlsx 檔案,開啟看到以下內容:

四、程式碼詳解

下面開始詳細解釋上面的程式程式碼。

第一步是匯入包:

import xlsxwriter

使用 Workbook() 建立一個工作簿,引數是工作簿的名字:

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

注意:XlsxWriter 只能建立檔案,不能讀取或修改現有的檔案。

然後使用 add_worksheet() 來新增一張工作表:

worksheet = workbook.add_worksheet()

預設工作表的名稱是 Sheet1,Sheet2 等,但是也可以指定名稱:

worksheet1 = workbook.add_worksheet()        # Defaults to Sheet1.
worksheet2 = workbook.add_worksheet('Data')  # Data.
worksheet3 = workbook.add_worksheet()        # Defaults to Sheet3.

我們使用工作表物件通過 write() 方法來寫入資料:

worksheet.write(row, col, some_data)

注意:在 XlsxWriter 中,行和列都是零索引。第一個單元格 A1 是 (0, 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)
    row += 1

新增一個公式來計算第二列中的專案總和:

worksheet.write(row, 1, '=SUM(B1:B4)')

最後,通過 close() 方法關閉 Excel 檔案:

workbook.close()

現在,就生成了一個 xlsx 檔案,可以通過 Excel 和其他電子表格應用讀取。

五、將不同型別的資料寫入 XLSX 檔案

上一個程式建立了一個使用 Python 和 XlsxWriter 模組格式化的簡單電子表格。

這次擴充套件要寫的資料,包括一些日期:

expenses = (
    ['Rent', '2013-01-13', 1000],
    ['Gas',  '2013-01-14',  100],
    ['Food', '2013-01-16',  300],
    ['Gym',  '2013-01-20',   50],
)

這裡的區別是,添加了一個帶有格式的日期列,並使該列稍寬以適應日期。

因此,程式碼如下:

from datetime import datetime
import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses03.xlsx')
worksheet = workbook.add_worksheet()

# Add a bold format to use to highlight cells.
# 新增用於突出顯示單元格的粗體格式
bold = workbook.add_format({'bold': 1})

# Add a number format for cells with money.
# 為顯式錢的單元格新增數字格式
money_format = workbook.add_format({'num_format': '$#,##0'})

# Add an Excel date format.
# 新增 Excel 日期格式
date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})

# Adjust the column width.
# 調整列寬
worksheet.set_column(1, 1, 15)

# Write some data headers.
worksheet.write('A1', 'Item', bold)
worksheet.write('B1', 'Date', bold)
worksheet.write('C1', 'Cost', bold)

# Some data we want to write to the worksheet.
expenses = (
    ['Rent', '2013-01-13', 1000],
    ['Gas',  '2013-01-14',  100],
    ['Food', '2013-01-16',  300],
    ['Gym',  '2013-01-20',   50],
)

# Start from the first cell below the headers.
row = 1
col = 0

for item, date_str, cost in (expenses):
    # Convert the date string into a datetime object.
    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

# Write a total using a formula.
worksheet.write(row, 0, 'Total', bold)
worksheet.write(row, 2, '=SUM(C2:C5)', money_format)

workbook.close()

這個程式和上一個程式的區別是:為日期添加了一個新的 Format 物件,對資料型別有額外處理。

Excel 對待不同型別的輸入資料,例如字串和數字,處理通常不同,雖然通常對於使用者是透明的。XlsxWriter 檢視用 worksheet.write() 方法模擬這一點,通過將 Python 資料型別對映到 Excel 支援的型別上。

write() 方法作為幾個更具體方法的通用別名:

  • write_string()

  • write_number()

  • write_blank()

  • write_formula()

  • write_datetime()

  • write_boolean()

  • write_url()

在這裡的程式碼中,我們使用了這些方法中的一些來處理不同型別的資料:

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

這主要是為了展示如果你需要更多的控制你寫入工作表中的資料,你可以使用恰當的方法。在這個簡單的例子裡,write() 方法事實上解決得很好。

對於程式來說日期處理也是新的 。

Excel 中的日期和時間是應用了數字格式的浮點數,方便以正確的格式顯示它們。如果日期和時間是 Python datetime 物件,那麼 XlsxWriter 會自動進行所需的數字轉換。但是,我們還需要新增數字格式來確保 Excel 將其顯示為日期:

from datetime import datetime
...

date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})
...

for item, date_str, cost in (expenses):
    # Convert the date string into a datetime object.
    date = datetime.strptime(date_str, "%Y-%m-%d")
    ...
    worksheet.write_datetime(row, col + 1, date, date_format )
    ...

最後需要 set_column() 來調整 B 列的寬度以便於日期可以清晰地展示:

# Adjust the column width.
worksheet.set_column('B:B', 15)

執行程式,看到生成了 Expenses03.xlsx 檔案,開啟看到以下內容:

六、參考教程

Tutorial 1: Create a simple XLSX file — XlsxWriter Documentation

Tutorial 3: Writing different types of data to the XLSX File — XlsxWriter Documentation

Python中的模組--XlsxWriter - 簡書 (jianshu.com)