python - 在继承单元格样式的同时插入多行
问题描述
我有一个 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 循环
- 在“第 6 行”插入一个新行,这应该会在第 5 行和第 6 行之间产生一个新行,并且在进行进一步调整时应该是我的“新第 6 行”。
- 使用另一个循环遍历新行的每个单元格,并将格式/样式从“前第 6 行”(甚至“第 5 行”)复制到新的“新第 6 行”中
- 将我的“新第 6 行”的行高调整为类似于“前第 6 行”(甚至“第 5 行”)的行高。
这是代码:
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
但仅适用于第一个新行。所有其他行似乎都设置为“自动”行高,而不是之前插入的行。
这是已知的效果吗?有人知道解决方法吗?
解决方案
推荐阅读
- erlang - 这是什么意思?
- javascript - 视频正在自动调整我的大小
- javascript - ember中的分类ui搜索
- javascript - mouseenter 事件后如何定位特定元素?
- java - 为什么在 Spring Boot 期间找不到 bean?
- apache-kafka - kafka异步提交请求失败
- javascript - 在 node.js 中使用 nodemailer 模块时无法识别变量的属性
- amazon-web-services - AWS Cognito - 如何确定用户是否使用电子邮件或电话号码注册
- python - Python3 re.group 几个组,即使有些组丢失
- git - 是否可以在 git 中添加(存储)几种文件类型?