Excel工作表中的一系列单元格可以设置为表格格式。 Openpyxl在documentation中提供了有关如何编写此类表的示例。
如何使用Openpyxl读取现有的Excel工作表?
一个简单的openpyxl语句,当提供表名时,它将把表读入一个openpyxl Table对象。
答案 0 :(得分:0)
Openpyxl将所有工作表表存储在一个列表中。这些可以通过以下方式轻松阅读:
tables = sheet._tables
然后可以通过其tableName搜索所需的表,并返回范围:
for table in tables:
if table.displayName == 'Table1':
return table.ref
以下是MWE:
from openpyxl import load_workbook
book = load_workbook('table.xlsx')
sheet = book.active
tables = sheet._tables
table_name = 'Table1'
def find_table(table_name, tables):
for table in tables:
if table.displayName == table_name:
return table.ref
table_range = find_table(table_name, tables)
答案 1 :(得分:0)
以下函数从表名称定义的范围中读取单元格值,并返回一个元组,其中包含列标题列表和数据字典。这对于创建Pandas DataFrame非常有用:
from openpyxl import load_workbook
import pandas as pd
def read_excel_table(sheet, table_name):
"""
This function will read an Excel table
and return a tuple of columns and data
This function assumes that tables have column headers
:param sheet: the sheet
:param table_name: the name of the table
:return: columns (list) and data (dict)
"""
table = sheet.tables[table_name]
table_range = table.ref
table_head = sheet[table_range][0]
table_data = sheet[table_range][1:]
columns = [column.value for column in table_head]
data = {column: [] for column in columns}
for row in table_data:
row_val = [cell.value for cell in row]
for key, val in zip(columns, row_val):
data[key].append(val)
return columns, data
book = load_workbook('table.xlsx')
ws = book.active
columns, data = read_excel_table(ws, 'Table1')
df = pd.DataFrame(data=data, columns=columns)
答案 2 :(得分:0)
@So_tourist 的答案提供了获取表格中单元格范围的方法,而不是所要求的 Table 对象。
要获取 openpyxl.worksheet.table.Table 对象,您可以执行以下操作:
sheet.tables.get('MyTable')
注意:此答案适用于 openpyxl 3.0.6,不确定之前或之后的版本。