用Python的好處是,可以把一系列的操作全部通過程序完成,步驟分解下來有這些:
1、通過爬蟲獲取數據(用selenium操作,當然這個是最愚蠢且效率最低的辦法,最好還是直接后臺數據庫調取);
2、用VBA和PQ配合完成數據的刷新和報表的制作;
3、用SMTP完成郵件發送(但是現在有bug,可能是某些二流服務器的問題,附件總是收不到或者是變成.dat文件,比如189郵箱。。。比如outlook。。。);
4、用itchat完成微信內的表格和文字發送。
上述四個步驟中,目前已經實現了2、3、4(3和4的代碼可以參看我之前的文章)
其實用VBA就能解決報表的制作和郵件發送了,但是1和4是肯定沒辦法完成的,而Python至少還有可能性!
使用的VBA代碼和Python代碼如下(主要思路就是用宏操控PQ,用Python操控宏):
Python代碼:
import win32com.client #運行宏 def useVBA(file_path, VBA): xlApp = win32com.client.DispatchEx("Excel.Application") xlApp.Visible = True xlApp.DisplayAlerts = 0 xlBook = xlApp.Workbooks.Open(file_path,False) xlBook.Application.Run(VBA) #宏 xlBook.Close(True) xlApp.quit() file_path1=r"C:UsersAdministratorDesktop報表日報!源數據(每日刷新).xlsm" file_path2=r"C:UsersAdministratorDesktop報表日報日報模板(會用宏的可以用用).xlsm" useVBA(file_path1, '數據刷新宏') useVBA(file_path2, '日報宏')
數據刷新宏代碼:
Sub 數據刷新宏() ActiveWorkbook.RefreshAll End Sub
日報宏代碼:
Sub 日報宏() '獲得昨天的標準日期(1018這種格式) yesterday = DateAdd("d", -1, Now) yesterday_format = Format(yesterday, "mmdd") & ".xlsx" Path = Application.ThisWorkbook.Path '增加一段代碼,強制必須刷新 ActiveWorkbook.UpdateLink Name:= _ Path & "!源數據(每日刷新).xlsm", Type:=xlExcelLinks Sheets("門店維度").Select Cells.Select Range("A2").Activate ActiveWorkbook.BreakLink Name:= _ Path & "!源數據(每日刷新).xlsm", Type:=xlExcelLinks Selection.Replace What:="#N/A", Replacement:="0", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("門店通報").Select Range("A1:K1").Select Selection.Copy Range("A2:K2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:= _ Path & "【基礎經營-實體1】:“乘風破浪”百日沖刺報表" & yesterday_format, _ FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False End Sub
其中的VBA代碼需要根據不同的情況和需求更改,但是Python通過調用VBA可以實現自動化的操作并實現定時的執行腳本
來源網絡,侵權聯系刪除