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

如何在指定目录的Excel电子表格中检索B列指定字符串并返回匹配文件名

原代码的适配缺陷
  • 现有逻辑是将所有文件作为纯文本二进制流逐行读取,无法识别Excel的结构化二进制存储格式,既可能把文件元数据里的乱码字符误判为匹配内容,也完全没法精准定位到表格B列的有效内容
  • 原逻辑没有做文件后缀过滤,会遍历目录下所有类型的文件(包括图片、压缩包、可执行程序等),产生大量无意义的读取操作,效率极低
可直接落地的改造代码

首先需要提前安装依赖库,执行命令:
pip install openpyxl

完整可运行代码:

import os
import openpyxl

keyword = input("请输入需要检索的关键词:")
# 替换为你实际要检索的根目录路径
root_dir = "替换为你的待检索根目录路径"
# 存储匹配到结果的文件列表
matched_files = []

for root, dirs, files in os.walk(root_dir, onerror=None):
    for filename in files:
        # 只处理xlsx格式的Excel文件,过滤其他无意义的文件类型
        if not filename.lower().endswith(".xlsx"):
            continue
        file_path = os.path.join(root, filename)
        try:
            # 以只读模式加载Excel,读取单元格实际存储值(跳过公式),减少内存占用
            wb = openpyxl.load_workbook(file_path, read_only=True, data_only=True)
            # 遍历当前文件下所有工作表
            for ws in wb.worksheets:
                # 只读取B列的所有单元格内容,不遍历其他列提升效率
                for cell in ws["B"]:
                    cell_val = cell.value
                    # 跳过空单元格,匹配目标关键词
                    if cell_val and keyword in str(cell_val):
                        matched_files.append(filename)
                        # 匹配成功后关闭工作簿,跳出循环,无需继续读取剩余内容
                        wb.close()
                        break
                # 已经匹配到当前文件,直接跳出工作表循环
                if filename in matched_files:
                    break
            wb.close()
        except (IOError, OSError, Exception):
            # 跳过权限不足、文件损坏的异常情况,避免程序中断
            continue

# 输出最终检索结果
if matched_files:
    print("检索完成,匹配到的文件如下:")
    for file in set(matched_files):
        print(f"- {file}")
else:
    print("未检索到包含目标关键词的Excel文件")
使用注意事项
  • 替换root_dir为你实际存放Excel文件的根目录路径,*Windows系统填写路径时建议在字符串前加r,比如r"C:\公司文件\报表目录",避免路径里的反斜杠被识别为转义字符导致报错
  • 代码全程以*只读模式读取文件,不会修改原Excel的任何内容,配合read_only=True参数,即使是带大量数据的大体积Excel文件,也不会占用过高内存
  • 如果需要输出文件的完整存储路径,把代码里matched_files.append(filename)改成matched_files.append(file_path)即可
  • 如果需要兼容2007年之前的老版本.xls格式文件,需要安装1.2.0版本的xlrd库(可通过pip install xlrd==1.2.0安装),调整代码里的文件后缀判断和对应读取逻辑即可,新版本xlrd已经不再支持读取xls格式

内容的提问来源于stack exchange,提问作者Ausamah Hobbi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 13:24:04