用魔发指令汇总excel,出现乱码,大佬们求助
回答
收藏

用魔发指令汇总excel,出现乱码,大佬们求助

Y
Yours飞飞
2026-01-21 10:18·浏览量:153
Y
Yours飞飞
发布于 2026-01-21 09:33更新于 2026-01-21 10:18153浏览

# 使用此指令前,请确保安装必要的Python库,例如使用以下命令安装:

# pip install pandas openpyxl xlrd

import pandas as pd

import os

from datetime import datetime

from typing import *

try:

   from xbot.app.logging import trace as print

except:

   from xbot import print

def merge_excel_files_by_date(source_folder, output_folder):

   """

   title: 按日期汇总Excel文件

   description: 将指定文件夹 % source_folder % 中的所有.xls格式Excel文件汇总到一个.xlsx格式文件中,文件名为当天日期格式,并保存到 % output_folder % 文件夹。确保中文字符正确显示,无乱码问题。

   inputs:

       - source_folder (folder): 源文件夹路径,包含需要汇总的.xls文件,eg: "D:\孙飞\销售流水数据源\仓库库存\各门店数据源"

       - output_folder (folder): 输出文件夹路径,用于保存汇总后的Excel文件,eg: "D:\孙飞\销售流水数据源\仓库库存\数据源汇总"

   outputs:

       - output_file_path (str): 生成的汇总文件完整路径,eg: "D:\孙飞\销售流水数据源\仓库库存\数据源汇总\2026-01-21.xlsx"

   """

   

   # 检查输入有效性

   if not os.path.exists(source_folder):

       raise FileNotFoundError(f"源文件夹不存在: {source_folder}")

   

   if not os.path.exists(output_folder):

       os.makedirs(output_folder, exist_ok=True)

   

   def _get_xls_files(folder_path):

       """获取文件夹中所有.xls文件"""

       xls_files = []

       for file in os.listdir(folder_path):

           if file.lower().endswith('.xls'):

               xls_files.append(os.path.join(folder_path, file))

       return xls_files

   

   def _read_xls_safely(file_path):

       """安全读取.xls文件,防止中文乱码"""

       try:

           # 使用xlrd引擎读取.xls文件

           df = pd.read_excel(file_path, engine='xlrd')

           return df

       except Exception as e:

           raise Exception(f"无法读取文件 {os.path.basename(file_path)}: {str(e)}")

   

   def _merge_excel_data(file_list):

       """合并所有Excel文件数据"""

       all_dataframes = []

       

       for file_path in file_list:

           try:

               df = _read_xls_safely(file_path)

               # 添加数据来源标识

               df['源文件'] = os.path.basename(file_path)

               all_dataframes.append(df)

               print(f"成功读取: {os.path.basename(file_path)} ({len(df)} 行数据)")

           except Exception as e:

               print(f"跳过文件 {os.path.basename(file_path)}: {str(e)}")

               continue

       

       if not all_dataframes:

           raise ValueError("没有成功读取到任何有效的Excel文件")

       

       # 纵向合并所有数据

       merged_df = pd.concat(all_dataframes, ignore_index=True, sort=False)

       return merged_df

   

   # 获取所有.xls文件

   xls_files = _get_xls_files(source_folder)

   

   if not xls_files:

       raise FileNotFoundError(f"在源文件夹中未找到.xls格式的文件")

   

   print(f"发现 {len(xls_files)} 个.xls文件待处理")

   

   # 合并所有Excel数据

   combined_data = _merge_excel_data(xls_files)

   

   # 生成当天日期文件名

   today_str = datetime.now().strftime("%Y-%m-%d")

   output_filename = f"{today_str}.xlsx"

   output_file_path = os.path.join(output_folder, output_filename)

   

   # 保存为.xlsx格式,确保中文正常显示

   try:

       combined_data.to_excel(output_file_path, index=False, engine='openpyxl')

       print(f"汇总完成!总计 {len(combined_data)} 行数据")

       print(f"输出文件: {output_file_path}")

       return output_file_path

   except Exception as e:

       raise Exception(f"保存文件时出错: {str(e)}")

收藏
全部回答1
最新
发布回答
回答