2016-05-12 72 views
2

我想格式化日期格式的某些列。如何使用OpenPyXL格式化標題列

我能夠成功使用更改單個單元格的格式:

date_style = Style(number_format="M/D/YYYY") 
ws['E7'].style = date_style 

但有一個毯子格式從頭部預留應用於列一個簡單的方法?

我注意到一些代碼在openpyxl網站應該這樣做,但它似乎沒有工作。它是如下:

col = ws.column_dimensions['E'] 
col.number_format = "M/D/YYYY" 

我假設它如果確實工作正常,它也適用於標題以及。

編輯:我嘗試下面的代碼格式的單元格:

ws.cell(row=1,column=5).style=date_style 

其中一期工程一樣的WS [「E7」]上面的語句,但在應該讓我運行一個循環的格式在上面。但是,當我執行以下命令:

for i in ws.rows[1:]: 
    ws.cell(row=i,column=5).style = date_style 

它會返回錯誤:unorderable類型:元組()< INT()

+0

您必須單獨格式化所有單元格。該文檔解釋說,格式化列和行尺寸對象對單個單元格沒有影響。 –

+0

Charlie指的是這樣的:「樣式也可以應用到列和行,但是請注意,這僅適用於在文件關閉後創建的單元格(在Excel中)如果要將樣式應用於整個行和列,您必須將樣式應用於每個單元格,這是對文件格式的限制「(可在[應用樣式]一節中找到(https://openpyxl.readthedocs.io/en/default/styles.html#applying-樣式))。但是,最後一點不太正確。這不是對文件格式的限制,而是對openpyxl的限制。 XlsxWriter可以做到這一點。 –

回答

2

我想通了,雖然可能不是最優雅的方式:

date_style = Style(number_format="M/D/YYYY") 
for col in range(5,8,2): 
    for row in range(2,100,1): 
     ws.cell(row=row,column=col).style = date_style 

我想讓列5和7具有日期格式。這樣做的竅門,但當然,如果我有超過100行,我將不得不提高這個數字。

+0

如果您特別想要第5列和第7列,則可以更清楚地說:「代替(5,7):」或「代替{5,7}:」而不是使用範圍。另外,如果它將爲1,則通常省略「step」參數。 –

+0

請注意,XlsxWriter(用於編寫Excel文件的不同包)可以執行您所描述的內容。它允許您爲整列設置默認樣式,然後只要您在編寫單個單元格時不重寫*格式,列默認樣式即可。 (它也可以讓你一次設置整行的樣式,所以你可以這樣做你的標題。行默認樣式勝過列默認樣式,所以這是你的情況的完美。) –

+0

啊,謝謝你的輸入。這很有幫助。 – Dennis