首页 > 编程语言 >python 自动化 excel数据筛选后发送outlook邮件

python 自动化 excel数据筛选后发送outlook邮件

时间:2024-11-04 13:45:26浏览次数:4  
标签:outlook sheet name python excel df today file columns

import pandas as pdfrom datetime import datetime, timedeltaimport win32com.client as win32import os  # 导入 os 模块用于文件删除import globimport openpyxl  # 导入 openpyxl 模块用于单元格合并和格式化
# 定义文件路径和工作表名称及起始行file_path = '要筛选的excel.xlsx'sheets = {    '2022': 2,  # 从第2行开始    '2023': 3,  # 从第3行开始    '2024': 3  # 从第3行开始}
# 定义邮件参数to_emails = ['[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]']  # 邮件接人人cc_emails = ['[email protected]', '[email protected]']  # 抄送  填写实际抄送人subject = 'Upcoming Stability Tests'    #  邮件主题  根据实际情况修改body = 'Dear Team,\nPlease find attached the list of upcoming stability tests.\nBest regards,\nYour Name'   # 邮件内容 根据实际情况修改
# 定义频率列名frequency_columns = ['列1', '列2', '列3']

def filter_data(df, today):    """筛选出过去 7 天内的稳定性测试数据"""    # 计算过去 7 天的日期范围    past_seven_days = today - timedelta(days=7)
    # 创建掩码,检查每个频率列是否在过去 7 天内    mask = (df[frequency_columns] >= past_seven_days) & (df[frequency_columns] <= today)
    # 返回符合条件的行    return df[mask.any(axis=1)]

# 读取数据并筛选data_frames = {}today = datetime.today()
file_pattern = "*.xlsx"files = [f for f in glob.glob(file_pattern) if f != 'upcoming_stability_tests.xlsx']
data_found = False  # 标记是否找到数据
today = datetime.today()seven_days_ago = today - timedelta(days=7)
for file_path in files:    for sheet, header_row in sheets.items():        try:            # 筛选符合条件的行            # 读取标题行和数据行            title_row = pd.read_excel(file_path, sheet_name=sheet, header=None, nrows=1)            df = pd.read_excel(file_path, sheet_name=sheet, skiprows=header_row - 1)            filtered_df = filter_data(df, today)            if not filtered_df.empty:                # 获取标题行字符串                title_str = title_row.values.flatten()[0]  # 获取标题字符串
                # 创建一个 DataFrame 来包含标题、列名和数据                combined_df = pd.DataFrame(columns=df.columns.tolist())                combined_df.loc[0] = [title_str] + [''] * (len(df.columns) - 1)  # 设置标题行                combined_df.loc[1] = df.columns.tolist()  # 设置列名行                # 添加数据行                combined_df = pd.concat([combined_df, filtered_df.reset_index(drop=True)], ignore_index=True)                data_frames[sheet] = combined_df  # 使用工作表名称作为字典的键
        except Exception as e:            print(f"Error reading sheet {sheet}: {e}")
# 如果有数据,则导出为 Excel 文件并发送邮件if data_frames:    output_file = '新的excel.xlsx'
    # 创建 ExcelWriter 使用 openpyxl    with pd.ExcelWriter(output_file, engine='openpyxl') as writer:        for sheet_name, frame in data_frames.items():            # 将 DataFrame 写入 Excel,禁止索引和标题            frame.to_excel(writer, sheet_name=sheet_name, index=False, header=False, startrow=0)            # frame.to_excel(writer, sheet_name=sheet_name, index=False, header=False, startrow=2)
            # 使用 openpyxl 进行额外操作            workbook = writer.book            worksheet = writer.sheets[sheet_name]
            # 获取标题行字符串(假设标题在 DataFrame 的第一行)            title_value = frame.at[0, frame.columns[0]]
            # 合并第一行的单元格(标题行)            worksheet.merge_cells(start_row=1, start_column=1, end_row=1, end_column=len(frame.columns))            cell = worksheet.cell(row=1, column=1)            cell.value = title_value  # 设置标题值            cell.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')  # 居中对齐
    try:        # 发送邮件        outlook = win32.Dispatch('outlook.application')        mail = outlook.CreateItem(0)        mail.Subject = subject        mail.Body = body        mail.To = ';'.join(to_emails)        mail.CC = ';'.join(cc_emails)        mail.Attachments.Add(Source=output_file)        mail.Send()
        # 邮件发送成功后删除文件        os.remove(output_file)        print(f"Email sent successfully and file {output_file} deleted.")
    except Exception as e:        print(f"Error sending email: {e}")else:    print("No upcoming stability tests within the next 7 days.")

标签:outlook,sheet,name,python,excel,df,today,file,columns
From: https://blog.csdn.net/qq_35203707/article/details/143482626

相关文章

  • 总结---20个工作中一定会用到的python实用小脚本
    一、文件批量重命名功能:将指定文件夹下的所有文件按照一定规则进行重命名。使用方法:importos​defbatch_rename(folder_path,prefix):  files=os.listdir(folder_path)  forindex,file_nameinenumerate(files):    old_file_path=os.path.j......
  • (3)读<Bayesian Analysis with Python 3rd>Python上的贝叶斯分析,一次概率建模的实践指导。
    在我们开启第二章之前,先去回顾一下第一章的主要内容我们从对统计建模,概率、条件概率、随机变量以及概率分布的讨论,延申至贝叶斯理论的知识。我们紧接着用一个硬币的问题来介绍基础的贝叶斯模型和数据分析。我们用经典的骰子例子介绍贝叶斯统计中概率分布以及不确定性。我们尝......
  • Python—深浅拷贝(copy)
    1、浅拷贝(copy.copy)定义:浅拷贝创建(复制)一个新对象,该对象与原对象具有相同的值,但对可变类型字段只会复制引用地址,而不复制实际的对象。这意味着原对象和新对象的引用类型属性指向同一块内存。拷贝的程度浅,只拷贝原数据的首地址,然后通过原数据的首地址,去获取内容特点:不可变数......
  • Python编程风格:使用语义更加明确的方法
    在软件开发中,编程风格是一个至关重要的方面,它不仅影响代码的可读性和可维护性,还直接关系到软件的质量和开发效率。在Python中,编程风格尤其重要,因为Python的设计哲学强调代码的可读性和简洁性。本文将探讨如何使用语义更加明确的方法来提升Python代码的可读性和可维护性,并提供具......
  • 基于Python的智能旅游推荐系统设计与实现
    一、摘要本毕业设计的内容是设计并且实现一个基于Python技术的智能旅游推荐系统。它是在Windows下,以MYSQL为数据库开发平台,使用Python技术进行设计。智能旅游推荐系统的功能已基本实现,主要实现首页,个人中心,用户管理,旅游资讯管理,景点信息管理,景点分类管理,酒店信息管理,行程分享......
  • python爬虫:xpath的基本使用指南
    当面对一个新网站时,了解其数据加载逻辑是获取所需信息的关键。以下是一份详细的技术指南,帮助你分析和提取网站数据。1.数据加载来源分析1.1数据从页面源代码加载浏览器获取页面源代码浏览器通过发送HTTP请求获取页面源代码。作为开发者,我们可以通过编程模拟这一过程。......
  • Python中的生产者-消费者模型:多进程与多线程的实践
    Python中的生产者-消费者模型:多进程与多线程的实践在现代编程中,生产者-消费者模型是一种常见的设计模式,用于处理任务队列和并发执行。Python提供了多种工具来实现这一模型,包括threading模块和multiprocessing模块。本文将通过一个实际的案例——从网页上批量下载图片——来......
  • python-17-包和模块-创建属于自己的python工具包
    python-17-包和模块一.说明python中的基础系列关于组织代码的基本单位就是包和模块,在真实项目中我们不可能将所有代码都写在一起,或者我们的一些工具类库等需要单独处理,方便各模块调用,怎么办?这时候包和模块就来了,可以很方便的帮我们组织代码。来开始我们今天的日拱一卒!。......