d8cec42fa9
Co-authored-by: aider (ollama/gemma4:12b) <aider@aider.chat>
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
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()
|