import time import datetime from docx import Document from docx.shared import Inches import win32com from win32com.client import Dispatch, constants import os class WEEK_REPORT: file_name = "" pre_file_name = "" pre_str = "" str = "" __word = "" __doc = "" def __init__(self): self.get_name() def get_name(self): self.file_name = "{}WW{}周工作报告_冯博涵.doc".format(time.strftime('%Y'), time.strftime('%W')) self.pre_file_name = "{}WW{}周工作报告_冯博涵.doc".format(time.strftime('%Y'), str(int(time.strftime('%W'))-1)) print("pre file name: {}; \nnew file name: {};".format(self.pre_file_name, self.file_name)) def copy_file(self): os.system('copy {} {}'.format(self.pre_file_name, self.file_name)) def edit_file(self): s = self.word.Selection s.Find.Execute("{}WW{}".format(time.strftime('%Y'), str(int(time.strftime('%W'))-1)), False, False, False, False, False, True, 1, False, "{}WW{}".format(time.strftime('%Y'), time.strftime('%W')), 1) self.get_last_week() self.get_current_week() s.Find.Execute(self.pre_str, False, False, False, False, False, True, 1, False, self.str, 1) def update_file(self): self.word = Dispatch('Word.Application') # 或者使用下面的方法,使用启动独立的进程: # word = DispatchEx('Word.Application') # 如果不声明以下属性,运行的时候会显示的打开word self.word.Visible = 1 # 0:后台运行 1:前台运行(可见) self.word.DisplayAlerts = 0 # 不显示,不警告 self.doc = self.word.Documents.Open(os.getcwd() + "\\{}".format(self.file_name)) # 打开一个已有的word文档 self.edit_file() # 编辑文档 self.doc.Save() # 保存 # doc.SaveAs(os.getcwd() + "\\funOpenExistFile.docx") # 另存为 # self.doc.Close() # 关闭 word 文档 # self.word.Quit() # 关闭 office # date: "2022-08-09" def get_last_week(self, date=None): if date: today = datetime.datetime.strptime(str(date), '%Y-%m-%d') else: today = datetime.datetime.today() end_time = today - datetime.timedelta(days=today.isoweekday()) -datetime.timedelta(days=2) start_time = end_time - datetime.timedelta(days=4) # return start_time.strftime("%Y-%m-%d"), end_time.strftime("%Y-%m-%d") self.pre_str = start_time.strftime("%#m.%#d") + "~" + end_time.strftime("%#m.%#d") print("pre_str: {}".format(self.pre_str)) # date: "2022-08-09" def get_current_week(self,date=None): if date: duty_date = datetime.datetime.strptime(str(date), '%Y-%m-%d') monday, friday = duty_date, duty_date else: monday, friday = datetime.date.today(), datetime.date.today() one_day = datetime.timedelta(days=1) while monday.weekday() != 0: monday -= one_day while friday.weekday() != 4: friday += one_day # return monday, friday # 返回时间字符串 # return datetime.datetime.strftime(monday, "%Y-%m-%d"), datetime.datetime.strftime(friday, "%Y-%m-%d") self.str = datetime.datetime.strftime(monday, "%#m.%#d") + "~" + datetime.datetime.strftime(friday, "%#m.%#d") print("str: {}".format(self.str)) if __name__ == "__main__": week_report = WEEK_REPORT() week_report.copy_file() week_report.update_file()