【问题标题】:Open and Fetch data from a ListObject of an Excel sheet with Python使用 Python 从 Excel 工作表的 ListObject 中打开和获取数据
【发布时间】:2020-02-10 07:41:37
【问题描述】:

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

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

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)

到目前为止也很好。

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

问题。 有谁知道一些 python 库/解决方案,可以直接从 Excel 表格中提取 Listobjects?。

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

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

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

【问题讨论】:

  • 查看 openpyxl 或 xlwings。

标签: python excel pandas import listobject


【解决方案1】:

詹姆斯是对的:

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

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

openpyxl 中有一个类可以读取表格。也可以通过 id:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多