diff --git a/merge_transactions.py b/merge_transactions.py new file mode 100644 index 0000000..b1325ec --- /dev/null +++ b/merge_transactions.py @@ -0,0 +1,63 @@ +import os +import pandas as pd +from pathlib import Path +import sys + +def merge_transaction_data(): + # 获取用户输入的路径 + input_path_str = input("请输入包含 Excel 文件的文件夹路径: ").strip() + input_dir = Path(input_path_str) + + # 检查路径是否有效 + if not input_dir.is_dir(): + print(f"错误:提供的路径 '{input_path_str}' 不是一个有效的目录。") + return + + all_data = [] + target_sheet = "交易流水" + + # 获取目录下所有的 excel 文件 (支持 .xlsx 和 .xls) + files = list(input_dir.glob("*.xlsx")) + list(input_dir.glob("*.xls")) + + if not files: + print("在该目录下未找到任何 Excel 文件。") + return + + for file_path in files: + try: + # 读取指定的 sheet + # 使用 pandas 的 read_excel,如果 sheet 不存在会抛出 ValueError + df = pd.read_excel(file_path, sheet_name=target_sheet) + + if df.empty: + print(f"跳过 {file_path.name}:工作表 '{target_sheet}' 为空。") + continue + + all_data.append(df) + print(f"成功读取: {file_path.name}") + except ValueError: + # 如果找不到指定的 sheet 名称,则跳过该文件 + print(f"跳过 {file_path.name}:未找到名为 '{target_sheet}' 的工作表。") + except Exception as e: + print(f"处理文件 {file_path.name} 时发生错误: {e}") + + if all_data: + # 合并所有 DataFrame + merged_df = pd.concat(all_data, ignore_index=True) + + # 定义输出路径 + output_file = input_dir / "txn_summary.xlsx" + + # 保存结果 + # 使用 openpyxl 作为引擎以确保兼容性 + merged_df.to_excel(output_file, index=False, engine='openpyxl') + print("-" * 30) + print(f"合并成功!") + print(f"总计处理文件数: {len(all_data)}") + print(f"结果已保存至: {output_file}") + else: + print("未找到包含 '" + target_sheet + "' 工作表的有效数据,未生成输出文件。") + +if __name__ == "__main__": + # 确保安装了必要的库:pip install pandas openpyxl + merge_transaction_data()