ZHBPythonTool/find_in_xlsx.py
张宏博 450edbc9bb init
2025-12-19 16:20:53 +08:00

118 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Excel文件内容查找工具
在指定文件夹中查找所有xlsx文件并搜索特定内容
"""
import os
from pathlib import Path
import openpyxl
from openpyxl.utils import get_column_letter
def find_text_in_xlsx(folder_path, search_text):
"""
在文件夹中所有xlsx文件里查找指定文本
Args:
folder_path: 要搜索的文件夹路径
search_text: 要查找的文本
Returns:
包含搜索结果的列表
"""
results = []
folder = Path(folder_path)
# 查找所有xlsx文件
xlsx_files = list(folder.rglob('*.xlsx'))
if not xlsx_files:
print(f"{folder_path} 中没有找到xlsx文件")
return results
print(f"找到 {len(xlsx_files)} 个xlsx文件开始搜索...\n")
for xlsx_file in xlsx_files:
# 跳过临时文件
if xlsx_file.name.startswith('~$'):
continue
try:
print(f"正在检查: {xlsx_file.name}")
workbook = openpyxl.load_workbook(xlsx_file, read_only=True, data_only=True)
# 遍历所有sheet
for sheet_name in workbook.sheetnames:
sheet = workbook[sheet_name]
# 遍历所有单元格
for row_idx, row in enumerate(sheet.iter_rows(), start=1):
for col_idx, cell in enumerate(row, start=1):
if cell.value is not None:
cell_value = str(cell.value)
if search_text in cell_value:
col_letter = get_column_letter(col_idx)
result = {
'file': str(xlsx_file),
'sheet': sheet_name,
'cell': f'{col_letter}{row_idx}',
'value': cell_value
}
results.append(result)
print(f" ✓ 找到: Sheet '{sheet_name}' - 单元格 {col_letter}{row_idx}: {cell_value}")
workbook.close()
except Exception as e:
print(f" ✗ 读取文件出错: {e}")
return results
def main():
print("=" * 60)
print("Excel文件内容查找工具")
print("=" * 60)
# 获取用户输入
folder_path = input("\n请输入要搜索的文件夹路径: ").strip().strip('"')
if not os.path.exists(folder_path):
print(f"错误: 文件夹 '{folder_path}' 不存在!")
return
if not os.path.isdir(folder_path):
print(f"错误: '{folder_path}' 不是一个文件夹!")
return
search_text = input("请输入要查找的内容 (默认: 101461): ").strip() or "101461"
print(f"\n开始在 '{folder_path}' 中搜索 '{search_text}'...\n")
print("-" * 60)
results = find_text_in_xlsx(folder_path, search_text)
print("\n" + "=" * 60)
print("搜索完成!")
print("=" * 60)
if results:
print(f"\n总共找到 {len(results)} 个匹配项:\n")
# 按文件分组显示结果
current_file = None
for result in results:
if result['file'] != current_file:
current_file = result['file']
print(f"\n文件: {Path(current_file).name}")
print(f"路径: {current_file}")
print(f" - Sheet: {result['sheet']}, 单元格: {result['cell']}, 内容: {result['value']}")
else:
print(f"\n未找到包含 '{search_text}' 的内容")
print("\n" + "=" * 60)
input("\n按回车键退出...")
if __name__ == "__main__":
main()