表格是对单元格组的引用。这使得某些操作(如设置表中单元格的样式)变得更容易。
创建表¶
from openpyxl import Workbook
from openpyxl.worksheet.table import Table, TableStyleInfo
wb = Workbook()
ws = wb.active
data = [
['Apples', 10000, 5000, 8000, 6000],
['Pears', 2000, 3000, 4000, 5000],
['Bananas', 6000, 6000, 6500, 6000],
['Oranges', 500, 300, 200, 700],
]
# add column headings. NB. these must be strings
ws.append(["Fruit", "2011", "2012", "2013", "2014"])
for row in data:
ws.append(row)
tab = Table(displayName="Table1", ref="A1:E5")
# Add a default style with striped rows and banded columns
style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False,
showLastColumn=False, showRowStripes=True, showColumnStripes=True)
tab.tableStyleInfo = style
'''
Table must be added using ws.add_table() method to avoid duplicate names.
Using this method ensures table name is unque through out defined names and all other table name.
'''
ws.add_table(tab)
wb.save("table.xlsx")
在工作簿中,表名必须是唯一的。默认情况下,创建表时第一行为表标题、所有列包含筛选器,并且表标题和列标题必须始终包含字符串。
注意,在write-only
模式下,必须手动添加列标题,并且值必须与对应的单元格相同。否则excel可能会认为文件无效并删除表。
使用表¶
在工作表中,ws.tables
是一个字典类型的对象,包括所有的表。
>>> ws.tables
{"Table1", <openpyxl.worksheet.table.Table object>}
通过名称或范围获取表
>>> ws.tables["Table1"]
or
>>> ws.tables["A1:D10"]
遍历工作表中的所有表格
>>> for table in ws.tables.values():
>>> print(table)
获取工作表中所有表格的名称和范围
以下代码将返回所有表名和范围的列表
>>> ws.tables.items()
>>> [("Table1", "A1:D10")]
删除表
>>> del ws.tables["Table1"]
获取工作表中表格的数量
>>> len(ws.tables)
>>> 1
手动添加列标题
在write-only
模式下,可以创建不包含列标题的表:
>>> table.headerRowCount = False
或者,手动初始化列标题:
>>> headings = ["Fruit", "2011", "2012", "2013", "2014"] # all values must be strings
>>> table._initialise_columns()
>>> for column, value in zip(table.tableColumns, headings):
column.name = value