You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Pandas中仅读取Excel的可见/已筛选行数据

问题解答

首先明确:纯Pandas本身没有提供直接读取Excel文件中已筛选/可见行的参数或方法。Pandas的read_excel底层是调用openpyxl/xlrd等解析库,只会读取工作表内全部的实际数据行,不会识别Excel自带的筛选隐藏状态。

如果不想大幅改动现有基于Pandas的代码,可以通过添加极少量openpyxl辅助代码实现需求,对原有逻辑入侵极低,修改后的代码可以参考如下:
首先你需要先安装openpyxl(如果没装的话执行pip install openpyxl),然后调整你的读取逻辑:

import os
import pandas as pd
from openpyxl import load_workbook

def json_file(i_fname, indexList, i_code, i_path):
    PathLink = os.path.join(i_path, i_fname + '.json')
    
    # 新增部分:用openpyxl读取可见行索引
    wb = load_workbook('input.xlsx', read_only=True, data_only=True)
    ws = wb['input_sheet1']
    visible_row_indices = []
    for idx, row in enumerate(ws.iter_rows(min_row=2)): # min_row=2是跳过表头,和你原有逻辑对齐
        if not ws.row_dimensions[row[0].row].hidden:
            visible_row_indices.append(idx)
    wb.close()
    
    # 原有pandas读取逻辑几乎不变
    excel_data_df = pd.read_excel('input.xlsx',
                                  sheet_name='input_sheet1',
                                  usecols=indexList,
                                  dtype={'codenum': str,
                                          'name': str,
                                          'school': str,
                                          'city': str})
    # 新增:只保留Excel中未被筛选隐藏的行
    excel_data_df = excel_data_df.iloc[visible_row_indices]
    
    # 以下原有逻辑完全不变
    df_filtered = excel_data_df.loc[excel_data_df["codenum"]==i_code]
    df_filtered.columns = ['Code', 'Student Name', 'Class', 'School Name','City Name']
    cols_to_keep = ['Student Name', 'Class', 'School Name','City Name']
    df_filtered = df_filtered[cols_to_keep]
    json_str = df_filtered.to_json(PathLink,orient='records',indent=2)

如果确实完全不想引入openpyxl,还有一个替代方案:你手动把Excel筛选后的内容另存为新的xlsx文件,再用pandas读取新文件即可,这个不需要改代码,只需要多一步手动操作。

内容的提问来源于stack exchange,提问作者Divya Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:45:08