2017-01-09 24 views
2

我試圖創建一個表與Python的第三方Excel的包,openpyxl製表的數據交集。 第一個的代碼的聲明繪製從細胞「A5」到細胞「E5」, 行線的第二for語句繪製另一行線從細胞「A6」細胞「E6」 第三for語句繪製一個柱從單元格'C5'到單元格'C9'的線條 第四條語句從單元格'F5到單元格'F9'繪製另一列Openpyxl邊境線突破與另一邊界線

但是,從單元格'C5'繪製到'C9'的列邊框似乎中斷當它與從單元格'A5'到'E5'和'A6'到'E6'的行線相交時,只有 , 開始以'C7'而不是'C5'繪製。

雖然從單元格'F5'繪製的列邊框線:'F9'工作得很好。 (我會張貼正在創建的表格的圖片,但我的信譽低於10) 有什麼我在某處做錯了嗎?

from openpyxl import Workbook 
from openpyxl.styles import Border, Side 
wb = Workbook() 
ws = wb.active 
ws.sheet_view.showGridLines = False 

column_border = Border(left=Side(style='thin')) 
row_border = Border(top=Side(style='thin')) 

for col in ws['C5:C9']: 
    for cell in col: 
     cell.border = column_border 
for col in ws['F5:F9']: 
    for cell in col: 
     cell.border = column_border 

for row in ws['A5:E5']: 
    for cell in row: 
     cell.border = row_border 
for col in ws['A6:E6']: 
    for cell in col: 
     cell.border = row_border 

wb.save('a.xlsx') 

回答

1

問題是您正在覆蓋它們相交處的單元格的邊界對象。您的第一個兩個循環將單元格的Border對象設置爲左側的細線。接下來的兩個循環將單元格的邊界對象設置爲頂部的細線 - 但是這會擺脫創建頂部線條的原始邊界對象。

我會建議做的是創建兩個方法添加邊框對象。這些方法將檢查邊框是否已經存在。如果是這樣,它會增加它而不是取代它。然後你在循環中調用這些方法,而不是直接分配。

此代碼可能或可能無法正常工作,我目前的系統沒有安裝OpenPyXL,我需要管理員權限來安裝它。

def add_row_boarder(row_cell): 
    if row_cell.border = None: 
     row_cell.border = row_border 
    else: 
     row_cell.border.top = Side(style='thin') 
    return row_cell 

def add_col_boarder(col_cell): 
    if col_cell.border = None: 
     col_cell.border = col_border 
    else: 
     col_cell.border.left = Side(style='thin') 
    return col_cel 
+0

感謝。第一條語句讓我對這個問題有了一個瞭解,我真的在寫相交 - 邊界 – Qudus

1

正如Rob所說,你正在覆蓋一些單元格的邊界。一個通用的方法來格式化單元格區域由documentation提供,但基本上你可以結合樣式,以便cell.border = cell.border + row_border

+0

樣式的組合運行良好。謝謝 – Qudus