如何使用openpyxl将excel中的所有单元格格式化为单一样式?

Uch*_*ara 5 python excel openpyxl

我正在使用python包openpyxl将数据写入excel工作表。我有一个包含三列的Excel文件。我将向其中转储数千行数据。我想要一种样式中的特定格式的标头,而另一种样式中的所有数据。我不想遍历所有单元格并专门设置样式,因为每当添加更多数据时,我也必须为其设置样式。因此,我想一次创建一个excel模板,通过对标题行应用“ style1”,对其余行应用“ style2”,这样就不必担心它们的样式,而只需要转储数据。无论如何,要设置预定义以将所有样式预定义为表格吗?

pat*_*ng1 5

提供一个示例,说明如何格式化特定格式的行,然后格式化其他单元格。

请注意,您必须为我以前使用的样式调用保存的工作簿。也就是说,在此示例中,我创建一个工作簿,保存它,然后加载它并设置单元格的格式,然后再次保存。

您可以在style的openpyxl docs部分中使用大量不同格式的示例。

这是一个使用pandas_datareader模块中的数据的完全可复制的示例。

import pandas as pd
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import Font
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas_datareader.data as web #optional for example only

#pull in your own dataframe and remove the next two lines if you want to
df = web.DataReader("AMZN", 'google')
df = df.tail(180)

wb = Workbook()
ws = wb.active

for r in dataframe_to_rows(df, index=False, header=True):
    ws.append(r)

wb.save("test.xlsx")

wb = load_workbook('test.xlsx')
ws = wb['Sheet']
style_1 = Font(color='0000FF00', bold=True, underline="single", size=15)
style_2 = Font(color='000000FF', italic=True, size=10)

for cell in ws["1:1"]:
    cell.font = style_1

for row in ws.iter_rows(min_row=2, max_col=5, max_row=len(df)+2):
    for cell in row:
        cell.font = style_2

#commented out my original snippet - preferred method recommended by Charlie Clark is ws.iter_rows() - above
'''

for i in range(2, len(df)+2):
    current = "%d:%d" % (i, i)
    for cell in ws[current]:
        cell.font = style_2
'''

wb.save("test.xlsx")
Run Code Online (Sandbox Code Playgroud)

结果表

**更新(基于OP提出的关于格式化附加到现有工作表的单元格的评论):

如果以后要在此工作表中添加更多内容,则可以同时对新单元格进行格式化。将以下代码段添加到原始答案中。

wb = load_workbook('test.xlsx')
ws = wb['Sheet']
ws['A182'] = "New String"

for cell in ws["182:182"]:
    cell.font = style_1
wb.save("test.xlsx")
Run Code Online (Sandbox Code Playgroud)

第三次更新工作表

  • 我每天都会向此工作表添加数据,因此每次转储数据时,我都应该再次为单元格应用样式。很好的解决方法。但我想在创建此工作表时预定义所有单元格并转储数据,而不必再担心单元格样式。是否可以 ? (2认同)