如何使用Pandas从Excel中只读取可见的工作表?

时间:2017-06-16 05:56:00

标签: python excel pandas

我必须得到一些随机的Excel表格,我想从那些文件中只读可见表

一次考虑一个文件,假设我有Mapping_Doc.xls,其中包含2个可见的工作表和2个隐藏的工作表。

由于这里的纸张较少,我可以用这样的名称解析它们:

代码:

xls = pd.ExcelFile('D:\\ExcelRead\\Mapping_Doc.xls')
print xls.sheet_names
df1 = xls.parse('Sheet1') #visible sheet
df2 = xls.parse('Sheet2') #visible sheet

输出:

[u'sheet1',u'sheet2',u'sheet3',u'sheet4']

如何只获得可见的纸张?

3 个答案:

答案 0 :(得分:5)

Pandas在内部使用xlrd库(如果您有兴趣,请查看excel.py源代码。)

您可以通过访问每个工作表的visibility属性来确定可见性状态。根据{{​​3}}中的评论,这些是可能的值:

  • 0 =可见
  • 1 =隐藏(可由用户取消隐藏 - 格式 - >工作表 - >取消隐藏)
  • 2 ="非常隐藏" (只能由VBA宏取消隐藏)。

这是一个用2个工作表读取Excel文件的示例,第一个是可见的,第二个是隐藏的:

import pandas as pd

xls = pd.ExcelFile('test.xlsx')

sheets = xls.book.sheets()

for sheet in sheets:
    print(sheet.name, sheet.visibility)

输出:

Sheet1 0
Sheet2 1

答案 1 :(得分:0)

回答@ƘɌỈSƬƠƑ,帮助了我。我想补充几点。

对于宏文件(.xlsm),可见性是不可预测的。可能是因为VBA代码落后于可见性设置。即使在Excel应用程序中打开文件时可以看到工作表,xlrd读取时的可见性也不总是0。

查看下面的屏幕截图:

这就是我在Excel中看到的。

enter image description here

使用xlrd

获取的可见性值

enter image description here

答案 2 :(得分:0)

我在 Pandas 上做了很多研发,但找不到任何解决方案。另一种方法是使用 xlrd 库。

您需要安装版本 1.2.0 才能获得对 xlsx excel 格式的支持。

pip install xlrd==1.2.0

阅读 excel 并循环浏览表格。在循环内,您将获得工作表名称,并使用工作表名称使用 sheet_by_name 方法获取工作表,并在其顶部使用 visibility 确定工作表是否可见。

import xlrd as xl
workbook = xl.open_workbook('File.xlsx')        
for sheet in workbook.sheets():
    isVisible = True if workbook.sheet_by_name(sheet.name).visibility == 0 else False
    if(isVisible == True):
        print(str(isVisible) + " : " + sheet.name)
    else:
        print(str(isVisible) + " : " + sheet.name)