使用 Python 从 Excel sheet 的 ListObject 打开并获取数据

Open and Fetch data from a ListObject of an Excel sheet with Python

问题: 从 y python 环境中打开一个 Excel 文件的 ListObject (excel table)。

原因: 在 python 中打开 excel 文件有多种解决方案。从 pandas 开始:

import pandas as pd
mysheetName="sheet1"
df = pd.read_excel(io=file_name, sheet_name=mysheetName)

这会将 sheet1 传递到 pandas 数据帧中。 到目前为止一切顺利。

其他更详细的解决方案是使用特定的库。这是一个堆栈溢出问题的代码。

from openpyxl import load_workbook
wb2 = load_workbook('test.xlsx')
print wb2.get_sheet_names()
['Sheet2', 'New Title', 'Sheet1']

worksheet1 = wb2['Sheet1'] # one way to load a worksheet
worksheet2 = wb2.get_sheet_by_name('Sheet2') # another way to load a worksheet
print(worksheet1['D18'].value)

到目前为止还不错。

但是: 如果您在 sheet 中有一个 ListObject (excel table),我没有找到任何方法来访问 Listobject 的数据。 Excel 的高级用户经常使用 ListObjects;最重要的是在 VBA 中编写宏时。非常方便,可以看作是 Excel 中的 pandas dataframe 的等价物。在 Excel Listobject 和 pandas 数据框之间架起桥梁似乎非常合乎逻辑。尽管如此,到目前为止我还没有找到任何解决方案、库或解决方法。

问题。 有谁知道一些 python lybrary/solution 可以直接从 Excel sheets 中提取 Listobjects 吗?

注意 1:不是很好的解决方案 当然知道 Listobject 的 "placement" 可以引用开始和最后一个单元格,但这是一个非常糟糕的解决方案,因为不允许您修改 excel 文件中的 Listobject( python 必须立即修改)。一旦 ListObject 的位置发生变化,或者 listobject 本身变大,python 代码就会被破坏。

注意2:我目前的解决方案: 我将 listObject 从 excel(使用宏)导出到 JSON 文件并从 python 读取它。但是额外的工作是显而易见的。 VBA 代码、额外文件等等

最后评论:如果有人对此问题感兴趣,但仍然不知道 excel 中的 ListObject 是什么 click,请参阅此处:

詹姆斯是对的:

https://openpyxl.readthedocs.io/en/stable/worksheet_tables.html

https://openpyxl.readthedocs.io/en/stable/api/openpyxl.worksheet.table.html

openpyxl中有一个class读取tables。同样通过 id:

class openpyxl.worksheet.table.Table(id=1,...

id=1 表示工作表的第一个 table。

请始终记住 Excel 中的 ListObjects 称为 Table。这很奇怪(与 VBA 一样)。如果您使用 VBA,您可能会忘记 ListObject=Table.

用xlwings也是可以的。 API有点不同:

import xlwings as xw
wb = xw.Workbook.active()
xw.Range('TableName[ColumnName]').value

或者要获取包含 header 和总计行的列,您可以这样做:

xw.Range('TableName[[#All], [ColumnName]]').value