feat(merge_excel.py): 添加脚本以合并包含"交易流水"工作表的Excel文件
Co-authored-by: aider (ollama/qwen3-coder:30b) <aider@aider.chat>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import os
|
||||
import sys
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
|
||||
def merge_excel_files(input_dir):
|
||||
"""
|
||||
合并指定目录下所有包含"交易流水"工作表的Excel文件
|
||||
"""
|
||||
# 创建输出文件路径
|
||||
output_file = os.path.join(input_dir, "txn_summary.xlsx")
|
||||
|
||||
# 存储所有数据的列表
|
||||
all_data = []
|
||||
|
||||
# 遍历输入目录中的所有文件
|
||||
for filename in os.listdir(input_dir):
|
||||
if filename.endswith(('.xlsx', '.xls')):
|
||||
file_path = os.path.join(input_dir, filename)
|
||||
|
||||
try:
|
||||
# 读取Excel文件的所有工作表
|
||||
excel_file = pd.ExcelFile(file_path)
|
||||
|
||||
# 检查是否包含"交易流水"工作表
|
||||
if "交易流水" in excel_file.sheet_names:
|
||||
# 读取"交易流水"工作表
|
||||
df = pd.read_excel(file_path, sheet_name="交易流水")
|
||||
|
||||
# 检查数据是否为空
|
||||
if not df.empty:
|
||||
# 添加源文件名列
|
||||
df['来源文件'] = filename
|
||||
|
||||
# 将数据添加到列表中
|
||||
all_data.append(df)
|
||||
else:
|
||||
print(f"警告: 文件 {filename} 中的'交易流水'工作表为空")
|
||||
|
||||
except Exception as e:
|
||||
print(f"处理文件 {filename} 时出错: {e}")
|
||||
|
||||
# 如果没有找到任何匹配的文件,退出
|
||||
if not all_data:
|
||||
print("未找到包含'交易流水'工作表的Excel文件或所有文件都为空")
|
||||
return
|
||||
|
||||
# 合并所有数据
|
||||
merged_df = pd.concat(all_data, ignore_index=True)
|
||||
|
||||
# 保存合并后的数据到输出文件
|
||||
merged_df.to_excel(output_file, index=False)
|
||||
|
||||
print(f"成功合并 {len(all_data)} 个文件,结果已保存到: {output_file}")
|
||||
|
||||
def main():
|
||||
# 从命令行参数获取输入目录路径
|
||||
if len(sys.argv) != 2:
|
||||
print("请提供输入目录路径作为命令行参数")
|
||||
print("使用方法: python merge_excel.py <input_directory>")
|
||||
return
|
||||
|
||||
input_dir = sys.argv[1]
|
||||
|
||||
# 检查输入目录是否存在
|
||||
if not os.path.isdir(input_dir):
|
||||
print(f"错误: 目录 '{input_dir}' 不存在")
|
||||
return
|
||||
|
||||
# 合并Excel文件
|
||||
merge_excel_files(input_dir)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user