如何在 OpenPyXL 中扩展 Excel 表的范围?

问题描述 投票:0回答:1

有关 OpenPyXL 中表操作的文档非常简单(请参阅此处)。

如何向表中添加新行?

到目前为止我发现的方法包括添加数据、删除表并重新创建它。

有没有更有效的方法?而且,这样做会丢失表格的样式(并且当我重新创建表格时无法成功添加样式)。

谢谢

import re
from copy import deepcopy
from pathlib import Path

from openpyxl import load_workbook
from openpyxl.worksheet.table import Table, TableStyleInfo

TABLE_NAME = "People"
xls_dir = Path("e:/AnsysDev/tfs_scripts/its") 

wb = load_workbook(xls_dir / "MyExcel.xlsx")
ws = wb.active
tb = ws.tables[TABLE_NAME]

max_row = ws.max_row
curr_ref = tb.ref
style = deepcopy(tb.tableStyleInfo)

data = [["Jack", 39]]
for row in data:
    max_row += 1
    ws.append(row)

new_ref = re.sub(r"\d+$", str(max_row), curr_ref)

del ws.tables[TABLE_NAME]

tb.tableStyleInfo = style
tb = Table(displayName=TABLE_NAME, ref=new_ref)
ws.add_table(tb)

new_xlsx = xls_dir / "New_Excel.xlsx"
wb.save(new_xlsx)
python openpyxl
1个回答
2
投票

实际上,它没有记录,但您只需添加数据并使用新引用设置属性

ref

您的代码可以简化为:

... max_row = ws.max_row curr_ref = tb.ref data = [["Jack", 39]] for row in data: max_row += 1 ws.append(row) tb.ref = re.sub(r"\d+$", str(max_row), curr_ref) # <= We extend the table here! new_xlsx = xls_dir / "New_Excel.xlsx" wb.save(new_xlsx)
您可以使用 OpenPyXL 内部函数将范围转换为元组,然后将其返回为范围字符串,而不是使用正则表达式 (

re

) 来修改引用。

from openpyxl.utils import range_boundaries, get_column_letter ... coord = list(range_boundaries(tb.ref)) data = [["Jack", 39]] for row in data: coord[-1] += 1 # <= No need to use max_row, just add one line! ws.append(row) tb.ref = f"{get_column_letter(coord[0])}{coord[1]}:{get_column_letter(coord[2])}{coord[3]}"
    
© www.soinside.com 2019 - 2024. All rights reserved.