首页 > 解决方案 > 在继承单元格样式的同时插入多行

问题描述

我有一个 XLSX 文件,我想将其用作最小模板,以使用 openpyxl 扩展和填充用户数据。对于“最小”,我的意思是我想在 XLSX 模板中只定义一两行,以便以后插入更多行,同时保持模板中行的格式/样式。

例子

   |    A     |    B     |    C     |    D
---+----------+----------+----------+-----...
   |          |          |          |

...

---+----------+----------+----------+-----...
   |          |          |          |
4  |          |          |          |
   |          |          |          |
---+----------+----------+----------+-----...
   |          |          |          |
5  | TEMPLATE | TEMPLATE | TEMPLATE | TEMPLATE
   |          |          |          |
---+----------+----------+----------+-----...
   |          |          |          |
6  | TEMPLATE | TEMPLATE | TEMPLATE | TEMPLATE
   |          |          |          |
---+----------+----------+----------+-----...
   |          |          |          |
7  |          |          |          |
   |          |          |          |
---+----------+----------+----------+-----...
   |          |          |          |
...

现在,在模板 XLSX 文件中(参见上面的示例),第 5 行和第 6 行针对字体、字体大小、边框样式、前景色、垂直调整...以及它们的行高进行了专门格式化,(不是标准或自动,但35,09要保留大约 3 行文本)。

使用 openpyxl 我阅读了示例 XLSX 文件,然后我使用 Python 循环

这是代码:


import copy

# with "ws" being the pointer to the current worksheet

# set column span
max_cols = ws.max_column

# apply for desired number of rows
for _iRow in range(10):

    # create new row
    ws.insert_rows(6)

    # set format of entire row
    for _iCol in range(1, max_cols +1):

        # cell styles
        ws.cell(6, _iCol).font = copy.copy(ws.cell(7, _iCol).font)
        ws.cell(6, _iCol).fill = copy.copy(ws.cell(7, _iCol).fill)
        ws.cell(6, _iCol).border = copy.copy(ws.cell(7, _iCol).border)
        ws.cell(6, _iCol).alignment = copy.copy(ws.cell(7, _iCol).alignment)

    # column dimensions
    ws.row_dimensions[6].height = ws.row_dimensions[5].height

虽然单个单元格格式/样式正确地转移到新行中,row height但仅适用于第一个新行。所有其他行似乎都设置为“自动”行高,而不是之前插入的行。

这是已知的效果吗?有人知道解决方法吗?

标签: pythonopenpyxl

解决方案


推荐阅读