excel文件更新发邮件提醒

写了一个程序,用 os.path.getmtime() 检测文件最后更新时间是否和上一次相同,如果大于上一次的更新时间,则认为文件有更新,给用户发邮件提醒。

目前遇到的问题:当人为打开excel文件但是没有更改任何内容时,excel文件的"Date Modified"时间也会更改成当前打开excel的时间。即一旦打开excel文件,系统就认为excel被更改。

目前解决思路:

1. 修复当前问题,即找等同于os.path.getmtime()的方法,但是不是一打开就认为是更新。(目前看来最简单)

2. 更改思路。不检测最后更新时间而是检测文件大小。当文件变大时,认为文件更新,发邮件提醒。

    遇到的问题:使用 os.path.getsize() 获取文件大小,发现当只更新一两行excel时读取出来的excel大小不变。所以不能邮件提醒。

    解决方案: 寻找更为精确的读取文件大小的方法。

3. 定时扫描。例如:每隔15min打开文件读取最大行,如果最大行相比于上一次有变化,发邮件提醒。前提是,我的excel文件是每行更新的,不存在每个cell更新的情况。

—————————————————————————————————————————————————————————————————————————————————————————————解决方案一:如果要excel不要一打开就认为是更新,就只能转换excel文件类型为xlsx。因此用到了openpyxl模块。但是问题是,我设置的是excel文件一旦更新,发送邮件的程序会打开excel读取里面的内容。两个程序同时打开excel会导致文件损坏。所以这个方法行不通。

解决方案二:不可行。因为excel每次更新的内容很小,读取文件大小会发现,更新一行文件的大小没有变化。没有寻找更为精确的读取文件大小的方法。

解决方案三:没有尝试。我认为定时扫描达不到实时提醒的目的,不够理想。而且也并没有从根本上解决同时打开文件认为更新的问题。

 

最后的解决方案:

还是延续了解决方案一的思路。解决了两个程序同时打开excel导致excel文件损坏的问题。

就是我在更新文件的时候,同时把文件的更新内容写入文本文件,检测文本文件是否存在。如果存在就发送邮件。发送邮件之后删除文本文件。

主要代码如下:

email_log = open(r'G:\expert system data\email_content.txt', 'w')
email_log.write("Tester ID: {}".format(tester))
email_log.write('\n')
email_log.write("Error Name: {}".format(errname))
email_log.write('\n')
email_log.write("Error Time: {}".format(errtime))
email_log.write('\n')
email_log.write("Error Details: {}".format(error_detail))
email_log.write('\n')
email_log.write("Provided Solution: {}".format(conclusion))
email_log.write('\n')
email_log.close()
while os.path.exists("G:\expert system data"):
    if os.path.exists("G:\expert system data\email_content.txt"):
        f1 = open("G:\expert system data\email_content.txt", "r")
        lines = f1.readlines()
        print(lines)
        f1.close()
        sendemail(lines)
        os.remove("G:\expert system data\email_content.txt")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值