我正尝试使用delete_rows()
方法从Excel中的格式化表格中删除行。但是,这并不会删除行,而只会删除单元格的内容。
作为一个信息,您可以使用openpyxl将一个范围格式化为表格,如文档中所述:https://openpyxl.readthedocs.io/en/latest/worksheet_tables.html
我在工作表 * Sheet1 * 中有一个名为 * Table5 * 的格式化表格:
要从第5行删除2行,我使用以下命令:
import openpyxl as xl
wb = xl.load_workbook('data.xlsx')
ws = wb['Sheet1']
ws.delete_rows(5, 2) # this is the delete command
wb.save('data.xlsx')
使用命令delete_rows()
,格式化表格的范围保留到第6行,而当我在Excel中直接删除行时,它会缩小。
问题是:如何正确删除数据和带格式的区域?
推论说明:
另外,当我插入数据时,表区域不会扩展。例如:
for i in range(4, 9):
ws.cell(row=i, column=1).value = i - 1
ws.cell(row=i, column=2).value = (i - 1) * 100
范围保持不变,即直到第6行,而通过手动将数据插入Excel,范围会自动扩展。
2条答案
按热度按时间eivgtgni1#
如果您跟踪了链接的文档,则必须具有:
1.添加数据到
Worksheet
1.创建了涵盖数据的
Table
示例(ref=A1:B6
)1.已使用
ws.add_table
将Table
示例添加到工作表中。以后添加或删除行时,这不会影响
ref=A1:B6
中保留的表。您需要更改
Table
示例的ref
以适应新的数据布局。NB.
tables
的接口自版本3.0.0起已更改,此代码已针对3.0.10
进行了测试,请查阅文档以了解之前/进一步的更改。9wbgstp72#
在下面,我通过 ljmc(我已经接受了)扩展了答案,其中包含了
openpyxl
的较新版本和较旧版本的两种方法。升级到
openpyxl==3.0.10
后,只需使用属性.tables
引用工作表中的表名即可更改格式化表的引用。示例:在工作表 Sheet1 中有一个名为 Table5 的格式化表格:就这么简单:因为
ws.tables['Table5']
包含格式化的表。在升级(
openpyxl==3.0.0
)之前,您使用._tables
属性的方法引用格式化表格,但您需要的是索引,而不是名称 Table5:仅当工作表中有一个格式化的表格,或者 Table5 是table对象中的第一个表格时,才能使用
[0]
。正确的Python方法是首先确定 Table5 在table对象中的索引: