用Python写个小程序,Excel内合同到期前,发送邮件提醒,避免遗漏处理
生活随笔
收集整理的這篇文章主要介紹了
用Python写个小程序,Excel内合同到期前,发送邮件提醒,避免遗漏处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用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内合同到期前,发送邮件提醒,避免遗漏处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【钉钉-场景化能力包】医院访客验证
- 下一篇: 川大网络教育计算机综合实践,川大电子电工