openpyxl:在没有迭代的情况下为一系列 Excel 单元格分配值或应用格式

mat*_*mat 8 python openpyxl

我想应用特定格式或为一系列 Excel 单元格分配一个值,而无需遍历每个单元格。我目前正在使用这个脚本:

from openpyxl import Workbook
from openpyxl.styles import Font
wb = Workbook()
ws = wb.active

## With iterations

# Apply style
for i, rowOfCellObjects in enumerate(ws['A1':'C4']):
    for n, cellObj in enumerate(rowOfCellObjects):
        cellObj.fill = Font(name='Times New Roman')

# Assign singular value to all cells
for i, rowOfCellObjects in enumerate(ws['A1':'C4']):
    for n, cellObj in enumerate(rowOfCellObjects):
        cellObj.value = 3

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

但我正在寻找一个更短的符号,像这样:

from openpyxl import Workbook
from openpyxl.styles import Font
wb = Workbook()
ws = wb.active

## Without iterations

# Apply style
ws['A1':'C4'].fill = Font(name='Times New Roman')

# Assign singular value to all cells
ws['A1':'C4'].value = 3

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

是否openpyxl或另一个模块提供这样的东西?

ps:我使用的是 Python 3.5

小智 13

这并不完全准确。OpenPyxel 允许将样式应用于列和行:

根据:https : //openpyxl.readthedocs.io/en/stable/styles.html

样式也可以应用于列和行,但请注意,这仅适用于文件关闭后(在 Excel 中)创建的单元格。如果要将样式应用于整行和整列,则必须自己将样式应用于每个单元格。这是文件格式的限制:

col = ws.column_dimensions['A']
col.font = Font(bold=True)
row = ws.row_dimensions[1]
row.font = Font(underline="single")
Run Code Online (Sandbox Code Playgroud)

  • 这是文档的片段,但有人可以解释这意味着什么吗?是这样我*可以*将样式应用到整个列,但这只会影响我在 python 中保存文件并在 excel 中打开后在 excel 中输入的值? (3认同)

Cha*_*ark 6

在 Excel 中,样式必须应用于单个单元格,因为这是文件格式的工作方式。由于它的工作方式, openpyxl 不提供所需的功能,但可以使用xlsxwriter