用Python实现Excel内合同到期前,发送邮件提醒

工作中经常碰到会有财务同事有一个合同台账的Excel表格,定期在合同到期前她们会发个提醒邮件给你,他们在想如果能做到自动提醒就好了,于是我用Python写了段代码,帮助他们实现这个功能。

下面这个是Excel的内容例子:
***这段代码可以用于excel表格中合同到期前每隔30天,60天,90天,自动调用outlook发送邮件提醒的功能,其他类似于提醒的功能也可以使用,有如下问题需要注意:

1.准备做成选择路径的方式,目前还不行。
2.Excel的每个sheet的H、L和M列不能删除或移动,L列“Today”和M“距离到期日天数”里面有公式取值,不要修改,H列“合同终止日期”的内容可以根据需要修改。
3.Excel中sheet的合同可以新增,但是需要符合上述的格式
4.可以增加sheet,或者修改sheet的名字
5.程序运行时因为要调用outlook,所以请同时在本地登录outlook邮箱
6.config.txt文件内存放收件人的邮箱地址,用分号“;”隔开
7.config.txt,autosendmail.exe,合同台账.xlsx三个文件需要放在同一个目录下
8.可以编译成exe文件运行
9.可以使用计划任务设置每天定时运行***

具体代码如下:

# -*- coding: utf-8 -*-"""
Module 合同到期前,发送邮件提醒,避免遗漏处理
"""import os
import xlrd                             #读取xlsx
import win32com.client as win32         #调用outlook
import openpyxl                         #写入xlsx
from datetime import datetime
from win32com.client import Dispatch    #读取excel公式def main():sNow = datetime.now().date() #获取当天的日期todayToexcel(sNow)just_open(filePath())wb = xlrd.open_workbook(filename=filePath())  #打开excelsheetNumbers = len(wb.sheet_names())          #获取sheet的数量for j in range(0, sheetNumbers):sheet1 = wb.sheet_by_index(j)nrows1 = sheet1.nrows                     #获取行数for iRow in range(1, nrows1):sCheck = sheet1.cell(iRow, 12).value  #获取指定单元格数据if sCheck == 90:s2 = sheet1.cell(iRow, 2).valuesendEmail(s2)                     #发送邮件elif sCheck == 60:s2 = sheet1.cell(iRow, 2).valuesendEmail(s2)elif sCheck == 30:s2 = sheet1.cell(iRow, 2).valuesendEmail(s2)def sendEmail(sTask):try:#读取config.txt,获得发送的目标邮箱账号sConfigFile = "config.txt"f = open(sConfigFile, 'r')try:file_Context = f.read()except:return Falsefinally:if f:f.close()outlook = win32.Dispatch('outlook.application')  #调用函数mail = outlook.CreateItem(0)  #打开outlookreceivers = [file_Context]mail.To = receivers[0]mail.Subject = '这是一封提醒邮件.'mail.Body = "邮件提醒:  \r\n    请注意如下合同即将到期,如已处理可忽略此封邮件。\r\n   合同名称:" + sTask + " \r\n     (此邮件由系统自动发送)"# mail.Attachments.Add('C:\\Users\enegc\\OneDrive - Bayer\\Personal Data\\'+sFileName+'.xlsx')mail.Send()return Trueexcept Exception as e:return Falsedef todayToexcel(today):#从datetime函数读取wb = openpyxl.load_workbook(filePath())   #打开文件sheetNumber = len(wb.sheetnames)  #获得sheet的数量for j in range(0, sheetNumber):outSheet = wb.worksheets[j]    #定位到相应的sheet,[j]为sheet页索引nRows = outSheet.max_row   #获取行数for i in range(2, nRows+1):outSheet.cell(row=i, column=12).value = todaywb.save(filePath())def filePath():#读取excel文件的路径sPath = os.getcwd() #获取当前路径sFile = "合同台账.xlsx"  #文件名sExcelFile = sPath + "\\" + sFile  #拼接完整路径return sExcelFiledef just_open(filename):#该函数用于读取excel中的公式结果,解决xlrd读取公式单元格内容为空的问题xlApp = Dispatch("Excel.Application")xlApp.Visible = FalsexlBook = xlApp.Workbooks.Open(filename)xlBook.Save()xlBook.Close()if __name__ == '__main__':main()

第一次上传作品,如果有什么问题希望大家谅解,有疑问请及时反馈给我,谢谢!

用Python写个小程序,Excel内合同到期前,发送邮件提醒,避免遗漏处理相关推荐

  1. 用python写一个小程序,解决买水果的问题?

    问题: 商店总共有三种水果,香蕉/苹果/葡萄,单价分别为3.5/5.0/3.0元/500克. 写一个小程序实现: 1.输出一个菜单:打印每种水果的价格: 2.寻问客户欲购买水果? 3.客户想购买的克数 ...

  2. python写微信小程序源码示例_python实现微信小程序用户登录、模板推送

    python实现微信小程序用户登录.模板推送 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python实现微信小程序用户登录.模板推送.txt ] (友情提示 ...

  3. python写微信小程序商城_Python(Django 2.x)+Vue+Uniapp微信小程序商城开发视频教程

    重要的事儿说在前面: 这并非是一个基础课程,请没有相关技术基础知识的同学先学一下基础知识. 本次分享虽然使用Uni-app这个"开发一次,多端覆盖"的框架,但只会给大家分享演示&q ...

  4. python写的小程序怎么封装_Promise实现微信小程序接口封装过程

    Promise实现微信小程序接口封装过程 发布时间:2020-06-15 13:40:43 来源:亿速云 阅读:419 作者:鸽子 相信很多开发者都遇到过回调地狱的问题.由于微信小程序的API基本都是 ...

  5. python写的小程序怎么封装_微信小程序源码分享之封装request的方法

    在utils文件夹新建文件utils.js,封装代码如下: var sendRequest = function (url, method, data = {}, header = {} ) { va ...

  6. python抽奖游戏_利用Python写一个抽奖程序,解密游戏内抽奖的秘密

    原标题:利用Python写一个抽奖程序,解密游戏内抽奖的秘密 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客 ...

  7. python微信小程序实例_python+Mysql写微信小程序后台

    python比较简单,学了用处比较多,所以推荐写微信小程序的后台. (php.java等做后台太复杂了,学起来费劲) [0--假设] 1.Python开发环境已经搭好了,我这边喜欢用VScode. 2 ...

  8. python程序实例电话本-利用Python电话本小程序!这波操作你给几分?

    原标题:利用Python电话本小程序!这波操作你给几分? 最近比较忙,只能抽空的写写文章,其实我也是一个上班族,python完全是个人想学然后希望以后对工作有所帮助,2019年了,祝大家新年快乐. 2 ...

  9. 用python做一个简单的游戏,用python写一个小游戏

    大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情. 1.Pyt ...

最新文章

  1. 'libxml/tree.h' file not found
  2. HDU4160(最小路径覆盖问题)
  3. Ajax异步XMLHttpRequest对象
  4. 局域网连接其他机器命令_弱电工程师必备技能,PING命令使用方法大全
  5. dsc linux 软件安装_linux – 安装dsc21时出错:“dsc21:取决于:cassandra(= 2.1.8),但要安装2.2.0”...
  6. ireport修改jrxml中的sql语句_SQL中的create table与insert into语句
  7. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
  8. linux下tomcat6.0与jdk安装详细步骤
  9. post请求改成body_post请求body格式
  10. C语言 pthread_cancelpthread_detach
  11. 想要羊毛薅得少,欺诈防控少不了
  12. 右下角出现测试模式 win7 内部版本7601如何去掉
  13. linux 相关命令
  14. 公司声明:Selina伤情稳定 Hebe及Ella工作继续
  15. Python将二维数组/多维数组转换为一维
  16. Recoil 状态管理方案的浅入浅出
  17. S3C2440-裸机篇-06 | UART数据发送接收实验(扫描模式)
  18. 解决ctrl+win+left/right失效问题(windows10桌面切换快捷键)
  19. 对象实例数据和对象类型数据
  20. 《Redis设计与实现》学习笔记

热门文章

  1. WLAN无线局域网技术 基础(二)PoE与PoE交换机的功能,二层组网和三层组网的概念与方式,有线组网概念:直连式组网、旁挂式组网,CAPWAP协议
  2. android shell 解压zip,Android解压缩ZIP / GZIP数据(基于InflaterInputStream实现)
  3. 段落向量与句子向量表达
  4. 快速跟踪查询快递的方法!
  5. 无人机远距离WiFi图传应用,CV5200无线WiFi模组,远程实时通信传输方案
  6. GitHub上小伙玩剧本杀假戏真做,没想到对方竟然是……
  7. 加推科技智能名片加冕36氪WISE 2018新经济之王
  8. 亚式期权_基于平均价格的期权
  9. 培训机构教师自我介绍
  10. IT痴汉的工作现状6-寂寞的夜