118 lines
3.7 KiB
Python
118 lines
3.7 KiB
Python
"""
|
||
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()
|