2016-05-12 32 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