excel⽂件更新发邮件提醒
写了⼀个程序,⽤ ime() 检测⽂件最后更新时间是否和上⼀次相同,如果⼤于上⼀次的更新时间,则认为⽂件有更新,给⽤
户发邮件提醒。
⽬前遇到的问题:当⼈为打开excel⽂件但是没有更改任何内容时,excel⽂件的"Date Modified"时间也会更改成当前打开excel的时间。即
⼀旦打开excel⽂件,系统就认为excel被更改。
⽬前解决思路:
1. 修复当前问题,即等同于ime()的⽅法,但是不是⼀打开就认为是更新。(⽬前看来最简单)
2. 更改思路。不检测最后更新时间⽽是检测⽂件⼤⼩。当⽂件变⼤时,认为⽂件更新,发邮件提醒。
大文件发送遇到的问题:使⽤ size() 获取⽂件⼤⼩,发现当只更新⼀两⾏excel时读取出来的excel⼤⼩不变。所以不能邮件提醒。
解决⽅案: 寻更为精确的读取⽂件⼤⼩的⽅法。
3. 定时扫描。例如:每隔15min打开⽂件读取最⼤⾏,如果最⼤⾏相⽐于上⼀次有变化,发邮件提醒。前提是,我的excel⽂件是每⾏更新的,不存在每个cell更新的情况。
———————————————————————————————————————————————————————————————解决⽅案⼀:如果要excel不要⼀打开就认为是更新,就只能转换excel⽂件类型为xlsx。因此⽤到了openpyxl模块。但是问题是,我设置
的是excel⽂件⼀旦更新,发送邮件的程序会打开excel读取⾥⾯的内容。两个程序同时打开excel会导致⽂件损坏。所以这个⽅法⾏不通。
解决⽅案⼆:不可⾏。因为excel每次更新的内容很⼩,读取⽂件⼤⼩会发现,更新⼀⾏⽂件的⼤⼩没有变化。没有寻更为精确的读取⽂
件⼤⼩的⽅法。
解决⽅案三:没有尝试。我认为定时扫描达不到实时提醒的⽬的,不够理想。⽽且也并没有从根本上解决同时打开⽂件认为更新的问题。
最后的解决⽅案:
还是延续了解决⽅案⼀的思路。解决了两个程序同时打开excel导致excel⽂件损坏的问题。
就是我在更新⽂件的时候,同时把⽂件的更新内容写⼊⽂本⽂件,检测⽂本⽂件是否存在。如果存在就发送邮件。发送邮件之后删除⽂本⽂件。
主要代码如下:
email_log = open(r'G:\expert system data\', '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 ists("G:\expert system data"):
if ists("G:\expert system data\"): f1 = open("G:\expert system data\", "r") lines = f1.readlines()
print(lines)
f1.close()
sendemail(lines)
发布评论