Python处理excel中,会有这么一种情况,有些sheet是隐藏的 但是使用python循环读取sheet的时候,会把隐藏的sheet也会读入进去,这个就很糟糕
这里有一种方法,可以满足对sheet的要求,并且可以进行循环读取sheet,获取想要的数据
如下图,这是创建的虚拟数据
一共是两个不隐藏的sheet,其实有5个,隐藏了3个
这里我们使用python的openpyxl和pandas库,不能使用xlrd库,因为对xlsx不太友好
import openpyxl
import pandas as pd
from openpyxl import load_workbook
filename = './data/test_sheet.xlsx'
'''
可以使用选择sheet选择,进行激活,因为是知道sheet的名字的
所以直接可以使用sheet名字进行激活工作表,再做状态判断
'''
# 分步来写
# 获取所有的sheet
wb = load_workbook(filename)
all_sheet_name = wb.sheetnames
print('这是所有的sheet,包含隐藏的: \n', all_sheet_name)
for sheetname in all_sheet_name:
if wb[sheetname].sheet_state == 'hidden':
print('这是隐藏的sheet: \n', sheetname)
else:
print('这不是隐藏的sheet: \n', sheetname)
当然不需要这么麻烦,知识为了演示清楚
获取不隐藏的sheet,并且循环读取展示数据
import openpyxl
import pandas as pd
from openpyxl import load_workbook
filename = './data/test_sheet.xlsx'
wb = load_workbook(filename)
all_sheet_name = wb.sheetnames
# 使用列表推导式取出所有不是隐藏的sheet
useful_sheet = [i for i in all_sheet_name if wb[i].sheet_state != 'hidden']
print('所有不是隐藏的sheet: \n', useful_sheet)
print('======================================')
for i in range(len(useful_sheet)):
data_i = pd.read_excel(filename, sheet_name=useful_sheet[i])
print(f'第{i+1}个sheet数据: \n', data_i)
print('=============================\n')
需要提醒一下,wb[sheetname]是openpyxl更新的使用sheet的方法,之前的wb.get_sheet_by_name[sheetanme],这个会出现警告,因为随着更新 有好多方法已经进行改变,需要注意下