前一篇看到輸出結果資料正確但看起來亂亂的
可以使用 str.ljust() 方法來確保每個輸出的欄位都有相同的寬度,這樣即使字串長度不同,輸出時也能對齊。
#ch2_10.py
import openpyxl
fn = "out1_5.xlsx"
wb = openpyxl.load_workbook(fn,data_only=True)
ws = wb.active
# 設定每個欄位的固定寬度
column_widths = [15, 15] # 品項欄寬設為 15,單價欄設為 15
for i in range(1, ws.max_row + 1): # row做索引增值
row_data = [] # 用來儲存每行的非空資料
for j in range(1, ws.max_column + 1): # column做索引增值
cell_value = ws.cell(row=i, column=j).value
# 如果儲存格的值不為 None 或空字串,才進行處理
if cell_value is not None and cell_value != "":
# 第1欄 (品項) 使用 ljust 左對齊
if j == 1:
row_data.append(str(cell_value).ljust(column_widths[j-1]))
# 第2欄 (單價) 使用 rjust 右對齊
elif j == 2:
row_data.append(str(cell_value).rjust(column_widths[j-1]))
# 如果該行有非空值,則輸出
if row_data:
print(" ".join(row_data))
忽略空字串和 None 值: 在輸出過程中發現excel表會有些空字串,通過檢查 if cell_value is not None and cell_value != ""
來忽略空的儲存格內容,這樣可以避免空白格出現在輸出結果中。
用列表收集行資料: 用一個 row_data
列表來收集每一行的非空資料,這樣可以避免直接輸出空白的資料。
輸出行資料: 只有在該行有資料時才會輸出,確保不輸出空行。
column_widths
調整: 可以自行設定每個欄位的寬度,第一列(品項)設定為15,第二列(單價)設定為15,這樣可以確保數字的整齊排列。