diff --git a/auto_run_python.bat b/auto_run_python.bat index 0d40a9e..deb5355 100644 --- a/auto_run_python.bat +++ b/auto_run_python.bat @@ -1,4 +1,4 @@ @REM @echo off -call conda activate fbh_base +call .\week_report\Scripts\activate python gen_word.py pause diff --git a/config.yaml b/config.yaml index 15403f5..9c65239 100644 --- a/config.yaml +++ b/config.yaml @@ -1 +1,3 @@ user_name: 冯博涵 +project_name: nb2337 +project_leader: 罗伟 diff --git a/gen_word.py b/gen_word.py index 2c858f7..2252939 100644 --- a/gen_word.py +++ b/gen_word.py @@ -8,30 +8,42 @@ import win32com from win32com.client import Dispatch, constants import os import sys -import ruamel.yaml as yaml +import ruamel.yaml as Yaml import logging.config + class WEEK_REPORT: file_name = "" pre_file_name = "" pre_str = "" str = "" user_name = "" + project_name = "" + project_leader = "" __word = "" __doc = "" + def __init__(self): with open("config.yaml", "r", encoding="UTF-8") as f1: - data = yaml.safe_load(f1) + yaml = Yaml.YAML(typ='safe', pure=True) + data = yaml.load(f1) logger.debug("config.yaml: {}".format(data)) self.user_name = data["user_name"] + self.project_name = data["project_name"] + self.project_leader = data["project_leader"] self.get_name() def get_name(self): self.file_name = "{}WW{}周工作报告_{}.doc".format(time.strftime('%Y'), time.strftime('%W'), self.user_name) - self.pre_file_name = "{}WW{}周工作报告_{}.doc".format(time.strftime('%Y'), str(int(time.strftime('%W'))-1), self.user_name) + if time.strftime('%W') == "01": + self.pre_file_name = "{}WW{}周工作报告_{}.doc".format(str(int(time.strftime('%Y')) - 1), str(52), + self.user_name) + else: + self.pre_file_name = "{}WW{}周工作报告_{}.doc".format(time.strftime('%Y'), + str(int(time.strftime('%W')) - 1), self.user_name) logger.info("pre file name: {}".format(self.pre_file_name)) - logger.info("new file name: {};".format(self.file_name)) - if(os.path.isfile(self.file_name)==True): + logger.info("new file name: {};".format(self.file_name)) + if os.path.isfile(self.file_name): logger.info("{} is already exist.".format(self.file_name)) self.open_file() sys.exit(1) @@ -48,40 +60,52 @@ class WEEK_REPORT: self.doc = self.word.Documents.Open(os.getcwd() + "\\{}".format(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) + table = self.doc.Tables(1) + + # 工作周 + table.Cell(Row=1, Column=2).Range.Text = "{}WW{}".format(time.strftime('%Y'), time.strftime('%W')) + + # 日期 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) - # run 宏 - # self.doc.run("update") + table.Cell(Row=1, Column=4).Range.Text = self.str + + # 所在项目 + table.Cell(Row=2, Column=2).Range.Text = self.project_name + + # 项目负责人 + table.Cell(Row=2, Column=4).Range.Text = self.project_leader + # 删除上周工作内容 + for i in range(7,12): + logger.info("process {} row ...".format(i)) + table.Cell(Row=i, Column=2).Range.Text = '' + table.Cell(Row=i, Column=3).Range.Text = '' + table.Cell(Row=13, Column=1).Range.Text = '' + table.Cell(Row=15, Column=1).Range.Text = '项目工作:\n' + def update_file(self): self.open_file() self.edit_file() self.doc.Save() # doc.SaveAs(os.getcwd() + "\\funOpenExistFile.docx") # 另存为 - + def close_file(self): self.doc.Close() # 关闭 word 文档 self.word.Quit() # 关闭 office - + 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) + 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") logger.debug("pre_str: {}".format(self.pre_str)) - def get_current_week(self,date=None): + 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 @@ -96,12 +120,14 @@ class WEEK_REPORT: self.str = datetime.datetime.strftime(monday, "%#m.%#d") + "~" + datetime.datetime.strftime(friday, "%#m.%#d") logger.debug("str: {}".format(self.str)) + if __name__ == "__main__": with open("log_config.yaml", 'r') as f: - config = yaml.safe_load(f.read()) + yaml = Yaml.YAML(typ='safe', pure=True) + config = yaml.load(f.read()) logging.config.dictConfig(config) logger = logging.getLogger("file_logger") week_report = WEEK_REPORT() week_report.copy_file() - week_report.update_file() \ No newline at end of file + week_report.update_file()