EXCEL_01

1.工作插入删除改标签颜色;
2.插入/删除多个工作表;
3.移动表格到最后、左右一行;(前提连续的数据区域);
4.冻结单元格;(取决点选当选单元格位置);
5.填充柄使用;
import os import re import openpyxl from PyPDF2 import PdfReader def clean_excel_value(value): """清理Excel非法字符,保留数字类型""" if isinstance(value, (int, float)): return value # 数值类型无需清理 # 移除非法的ASCII控制字符(保留\t, \n, \r) return re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f]', '', str(value)) def export_all_pdf_metadata_to_excel(root_folder): """ 递归提取目标文件夹及其所有子目录中的PDF元数据 :param root_folder: 目标根文件夹路径 :return: (成功处理文件数, 失败文件数) """ # 创建Excel工作簿 success_wb = openpyxl.Workbook() success_ws = success_wb.active success_ws.title = "成功文件" fail_wb = openpyxl.Workbook() fail_ws = fail_wb.active fail_ws.title = "失败文件" # 设置表头(增加文件路径列) success_headers = ["文件路径", "文件名", "页数", "标题", "作者", "主题", "创建者", "创建日期", "修改日期"] success_ws.append([clean_excel_value(header) for header in success_headers]) fail_headers = ["文件路径", "文件名", "错误信息"] fail_ws.append([clean_excel_value(header) for header in fail_headers]) # 处理统计 success_count = 0 fail_count = 0 total_pdf_count = 0 print(f"开始递归扫描文件夹: {clean_excel_value(root_folder)}") # 递归扫描所有PDF文件 for foldername, subfolders, filenames in os.walk(root_folder): for filename in filenames: if not filename.lower().endswith('.pdf'): continue file_path = os.path.join(foldername, filename) total_pdf_count += 1 try: with open(file_path, 'rb') as f: reader = PdfReader(f) # 获取元数据 metadata = reader.metadata or {} page_count = len(reader.pages) # 准备Excel行数据并清理非法字符 row_data = [ clean_excel_value(foldername), # 文件所在路径 clean_excel_value(filename), # 文件名 page_count, # 页数(数值类型) clean_excel_value(metadata.get('/Title', '')), # 标题 clean_excel_value(metadata.get('/Author', '')), # 作者 clean_excel_value(metadata.get('/Subject', '')), # 主题 clean_excel_value(metadata.get('/Creator', '')), # 创建者 clean_excel_value(metadata.get('/CreationDate', '')), # 创建日期 clean_excel_value(metadata.get('/ModDate', '')) # 修改日期 ] # 添加到成功工作表 success_ws.append(row_data) print(f"✓ 成功处理: {clean_excel_value(os.path.join(foldername, filename))}") success_count += 1 except Exception as e: error_msg = str(e) # 清理错误信息中的非法字符 cleaned_error = clean_excel_value(error_msg) # 添加到失败工作表 fail_ws.append([ clean_excel_value(foldername), clean_excel_value(filename), cleaned_error ]) print(f"✗ 处理失败: {clean_excel_value(os.path.join(foldername, filename))} - {cleaned_error}") fail_count += 1 # 保存Excel文件 success_excel_path = os.path.join(root_folder, "pdf_metadata_success.xlsx") fail_excel_path = os.path.join(root_folder, "pdf_metadata_fail.xlsx") try: success_wb.save(clean_excel_value(success_excel_path)) fail_wb.save(clean_excel_value(fail_excel_path)) except Exception as save_error: print(f"保存Excel时出错: {save_error}") return success_count, fail_count # 输出统计信息 print("\n处理完成:") print(f"扫描文件夹总数: {len(list(os.walk(root_folder)))}") print(f"发现PDF文件总数: {total_pdf_count}") print(f"成功处理: {success_count} - 已保存到: {clean_excel_value(success_excel_path)}") print(f"处理失败: {fail_count} - 已保存到: {clean_excel_value(fail_excel_path)}") return success_count, fail_count # 使用示例 if __name__ == "__main__": # 替换为你的根文件夹路径 root_folder = r"D:\Download\IDM\20250225标准" print("=== PDF元数据提取工具 ===") print("支持递归扫描所有子目录中的PDF文件") print(f"目标根目录: {clean_excel_value(root_folder)}") success, fail = export_all_pdf_metadata_to_excel(root_folder) print(f"\n最终结果: 成功={success}个, 失败={fail}个") print("处理完成! Excel文件已保存在根目录") 在此代码基础上添加,使读取到的pdf元数据的创建和修改日期按年月日-时分秒显示在最终导出的表格中
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值