使用 pandas 将 Excel 工作表(Listobject)读取到 python 中

Ber*_*nes 7 python excel vba listobject pandas

有多种方法可以将 Excel 数据读取到 Python 中。Pandas 还提供了用于写入和读取的 API

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile

df = pd.read_excel('File.xlsx', sheetname='Sheet1')
Run Code Online (Sandbox Code Playgroud)

效果很好。

但是:将每个工作表的表格直接访问到 pandas 数据框中的方法是什么?

在此输入图像描述

上图显示了一个工作表,其中包含一个与 CELL (1,1) 分开的表。

此外,该工作表可能包含多个表(VBA 中的列表对象)。

我无法在任何地方找到将它们读入熊猫的方法。

注意1:无法修改工作簿以使所有表格都指向单元格(1,1)。注2:我想只使用pandas(如果可能的话)并尽量减少导入其他库的需要。但没有其他办法我准备使用其他lybray。无论如何,我无法使用 xlwings 进行管理。

这里看起来可以解析excel文件,但是没有为表格提供解决方案,仅提供完整的工作表。

pandas 的文档似乎没有提供这种可能性。

谢谢。

Gra*_*man 6

您可以使用 xlwings,这是一个在 python 中处理 excel 文件的好包。

这是针对单个表的,但是使用 xlwings 集合(App>books>sheets>tables)来迭代所有表是非常简单的。表当然是列表对象。

import xlwings
import pandas

with xlwings.App() as App:
    _ = App.books.open('my.xlsx')
    rng = App.books['my.xlsx'].sheets['mysheet'].tables['mytablename'].range
    df: pandas.DataFrame = rng.expand().options(pandas.DataFrame).value
Run Code Online (Sandbox Code Playgroud)


Eja*_*med 5

我知道这个问题已被标记为已解决,但我发现一篇文章提供了更可靠的解决方案: 完整帖子

我想这个库的新版本支持更好的工作簿结构可见性。总结如下:

  1. load_workbook使用以下函数加载工作簿openpyxl
  2. 然后,您可以访问其中的工作表,其中包含 Excel 中列表对象(表)的集合。
  3. 一旦获得对表的访问权限,您就可以访问这些表的范围地址。
  4. 最后,他们循环遍历范围并从中创建一个 pandas 数据框。

这是一个更好的解决方案,因为它使我们能够循环遍历工作簿中的所有工作表和表格。