1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
import office import pandas as pd import os import shutil from datetime import date, datetime from config import *
def generate_report(): """生成日报""" today = date.today().strftime('%Y-%m-%d') print(f'开始生成 {today} 的日报...') today_file = os.path.join(DATA_FOLDER, f'{today}.xlsx') if not os.path.exists(today_file): print(f'今日数据文件不存在: {today_file}') return False df = office.excel.read(path=today_file) print(f'读取到 {len(df)} 条数据') df['日期'] = today df['周几'] = pd.to_datetime(today).day_name() total = df['销售额'].sum() avg = df['销售额'].mean() summary = [ ['报表日期', today], ['数据条数', len(df)], ['销售总额', f'{total:.2f}'], ['平均销售额', f'{avg:.2f}'], ['最高销售额', f'{df["销售额"].max():.2f}'], ['最低销售额', f'{df["销售额"].min():.2f}'] ] os.makedirs(OUTPUT_FOLDER, exist_ok=True) output_file = os.path.join(OUTPUT_FOLDER, f'日报_{today}.xlsx') office.excel.write(path=output_file, data=df.values.tolist()) chart_data = [ ['指标', '数值'], ['销售总额', total], ['平均销售额', avg], ['最高销售额', df['销售额'].max()] ] chart_file = os.path.join(OUTPUT_FOLDER, f'图表_{today}.xlsx') office.excel.chart( path=chart_file, data=chart_data, chart_type='bar', title=f'{today} 销售概览' ) print(f'报表已生成: {output_file}') send_email(today, output_file) backup_data(today_file) return True
def send_email(today, report_file): """发送邮件""" content = f'''领导好,
这是 {today} 的每日销售数据报告,请查收附件。
祝工作顺利! 程序员晚枫 ''' try: office.email.send( email=EMAIL_CONFIG['to'], cc=EMAIL_CONFIG['cc'], title=f'【日报】{today} 销售数据', content=content, attachment=report_file ) print('邮件已发送!') except Exception as e: print(f'邮件发送失败: {e}')
def backup_data(file_path): """备份数据""" os.makedirs(BACKUP_FOLDER, exist_ok=True) today = date.today().strftime('%Y-%m-%d') backup_file = os.path.join(BACKUP_FOLDER, f'{today}_backup.xlsx') shutil.copy(file_path, backup_file) print(f'数据已备份: {backup_file}')
if __name__ == '__main__': success = generate_report() if success: print('✅ 今日报表任务完成!') else: print('❌ 报表生成失败,请检查数据文件!')
|