本篇文章同步發布於 Python 使用 openpyxl 調整 Excel 欄位寬度【Python 處理 Excel #21】
Excel 儲存格的內容長度有長有短,有時候同一個欄位所需要的欄寬差異不大,這時候可以透過設定儲存格欄寬讓欄位保持適當寬度,節省空間也方便閱讀。這篇文章介紹如何使用 Python 的 openpyxl 調整 Excel 儲存格的欄寬。
這篇文章使用到的 Excel 工作表內容如下:
order_id | total_amount | note |
---|---|---|
0001 | 10500 | 如果有問題請聯繫手機:0912-345-678。 |
0002 | 3000 | 請於10月17日之前送達。包裝上不需要附贈發票。 |
0003 | 1000 | 不熟悉產品安裝方式,需要上門安裝服務。 |
下方的程式碼介紹在 openpyxl 中如何調整 Excel 儲存格的欄寬:
from openpyxl.utils import get_column_letter
def adjust_column_width(ws, fixed_width_fields):
"""
調整工作表中指定欄位的欄寬。
Args:
ws (Worksheet): openpyxl 的 Worksheet 物件。
fixed_width_fields (dict): 包含欄位名稱和對應寬度的字典。
"""
for col in range(1, ws.max_column + 1):
header = ws.cell(row=1, column=col).value
for key in fixed_width_fields:
if key in header:
ws.column_dimensions[get_column_letter(col)].width = fixed_width_fields[key]
break # 找到匹配的鍵後跳出內部循環,避免重複設置
# 設定欄寬
fixed_width_fields = {
'order_id': 8,
'amount': 12,
'note': 23,
}
adjust_column_width(ws, fixed_width_fields)
adjust_column_width
函數遍歷工作表的所有欄位,檢查每個欄位的標題是否匹配 fixed_width_fields
字典中的鍵。如果匹配,就將該欄位的寬度設置為字典中對應的值。
接下來分段解釋這個程式碼。
from openpyxl.utils import get_column_letter
get_column_letter
函數用於將欄位的數字索引轉換為 Excel 中的字母表示方法,例如,1 轉換為 'A'
、2 轉換為 'B'
等。def adjust_column_width(ws, fixed_width_fields):
Worksheet
物件,代表 Excel 中的一個工作表。for col in range(1, ws.max_column + 1):
header = ws.cell(row=1, column=col).value
for
循環遍歷工作表中的每一個欄位 (從 1 到最大欄位)。for key in fixed_width_fields:
if key in header:
ws.column_dimensions[get_column_letter(col)].width = fixed_width_fields[key]
break # 找到匹配的鍵後跳出內部循環,避免重複設置
get_column_letter(col)
取得該欄位的字母表示方法,並將其寬度設置為對應的值。break
跳出內部循環,避免對同一欄位重複設置寬度。column_dimensions
是一個屬性,回傳一個字典,該字典的鍵是欄位的字母表示方法,例如 'A'
、'B'
、'C'
等,值是相應欄位的 ColumnDimension
物件。這些物件用於設定欄位的屬性,如寬度、隱藏狀態等。.width
是一個屬性,用於設置或取得該欄位的寬度。它接受一個數字作為值,表示該欄位的寬度。fixed_width_fields = {
'order_id': 8,
'amount': 12,
'note': 23,
}
adjust_column_width(ws, fixed_width_fields)
fixed_width_fields
,包含三個欄位及其所需的寬度。adjust_column_width(ws, fixed_width_fields)
函數實際調整欄位寬度。如果想要嘗試使用 openpyxl 調整儲存格欄寬,可以使用以下程式碼測試:
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
def create_sample_excel():
"""
建立一個 demo 的 Excel 檔案並調整欄寬。
"""
# 建立 Workbook
wb = Workbook()
ws = wb.active
ws.title = 'demo'
# 增加欄位名稱與資料
headers = ['order_id', 'total_amount', 'note']
data = [
['0001', 10500, '如果有問題請聯繫手機:0912-345-678。'],
['0002', 3000, '請於10月17日之前送達。包裝上不需要附贈發票。'],
['0003', 1000, '不熟悉產品安裝方式,需要上門安裝服務。']
]
ws.append(headers)
for row in data:
ws.append(row)
# 定義欄寬
fixed_width_fields = {
'order_id': 8,
'amount': 12,
'note': 23,
}
adjust_column_width(ws, fixed_width_fields)
# 儲存活頁簿
wb.save('output.xlsx')
# 執行案例
if __name__ == "__main__":
create_sample_excel()
get_column_letter
函數用於將欄位的數字索引轉換為 Excel 的字母表示方法。column_dimensions
的屬性 width
可以調整 Excel 欄位寬度。本篇文章同步發布於 Python 使用 openpyxl 調整 Excel 欄位寬度【Python 處理 Excel #21】