基于table方法实现

This commit is contained in:
fengbohan 2024-01-02 16:25:12 +08:00
parent a6cae7d8f8
commit 57b47241fc
3 changed files with 49 additions and 21 deletions

View File

@ -1,4 +1,4 @@
@REM @echo off @REM @echo off
call conda activate fbh_base call .\week_report\Scripts\activate
python gen_word.py python gen_word.py
pause pause

View File

@ -1 +1,3 @@
user_name: 冯博涵 user_name: 冯博涵
project_name: nb2337
project_leader: 罗伟

View File

@ -8,30 +8,42 @@ import win32com
from win32com.client import Dispatch, constants from win32com.client import Dispatch, constants
import os import os
import sys import sys
import ruamel.yaml as yaml import ruamel.yaml as Yaml
import logging.config import logging.config
class WEEK_REPORT: class WEEK_REPORT:
file_name = "" file_name = ""
pre_file_name = "" pre_file_name = ""
pre_str = "" pre_str = ""
str = "" str = ""
user_name = "" user_name = ""
project_name = ""
project_leader = ""
__word = "" __word = ""
__doc = "" __doc = ""
def __init__(self): def __init__(self):
with open("config.yaml", "r", encoding="UTF-8") as f1: 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)) logger.debug("config.yaml: {}".format(data))
self.user_name = data["user_name"] self.user_name = data["user_name"]
self.project_name = data["project_name"]
self.project_leader = data["project_leader"]
self.get_name() self.get_name()
def get_name(self): def get_name(self):
self.file_name = "{}WW{}周工作报告_{}.doc".format(time.strftime('%Y'), time.strftime('%W'), self.user_name) 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("pre file name: {}".format(self.pre_file_name))
logger.info("new file name: {};".format(self.file_name)) logger.info("new file name: {};".format(self.file_name))
if(os.path.isfile(self.file_name)==True): if os.path.isfile(self.file_name):
logger.info("{} is already exist.".format(self.file_name)) logger.info("{} is already exist.".format(self.file_name))
self.open_file() self.open_file()
sys.exit(1) sys.exit(1)
@ -48,17 +60,29 @@ class WEEK_REPORT:
self.doc = self.word.Documents.Open(os.getcwd() + "\\{}".format(self.file_name)) self.doc = self.word.Documents.Open(os.getcwd() + "\\{}".format(self.file_name))
def edit_file(self): def edit_file(self):
s = self.word.Selection table = self.doc.Tables(1)
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.Cell(Row=1, Column=2).Range.Text = "{}WW{}".format(time.strftime('%Y'), time.strftime('%W'))
# 日期
self.get_last_week() self.get_last_week()
self.get_current_week() self.get_current_week()
s.Find.Execute(self.pre_str, table.Cell(Row=1, Column=4).Range.Text = self.str
False, False, False, False, False, True, 1, False,
self.str, 1) # 所在项目
# run 宏 table.Cell(Row=2, Column=2).Range.Text = self.project_name
# self.doc.run("update")
# 项目负责人
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): def update_file(self):
self.open_file() self.open_file()
@ -75,13 +99,13 @@ class WEEK_REPORT:
today = datetime.datetime.strptime(str(date), '%Y-%m-%d') today = datetime.datetime.strptime(str(date), '%Y-%m-%d')
else: else:
today = datetime.datetime.today() 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) start_time = end_time - datetime.timedelta(days=4)
# return start_time.strftime("%Y-%m-%d"), end_time.strftime("%Y-%m-%d") # 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") self.pre_str = start_time.strftime("%#m.%#d") + "~" + end_time.strftime("%#m.%#d")
logger.debug("pre_str: {}".format(self.pre_str)) logger.debug("pre_str: {}".format(self.pre_str))
def get_current_week(self,date=None): def get_current_week(self, date=None):
if date: if date:
duty_date = datetime.datetime.strptime(str(date), '%Y-%m-%d') duty_date = datetime.datetime.strptime(str(date), '%Y-%m-%d')
monday, friday = duty_date, duty_date monday, friday = duty_date, duty_date
@ -96,9 +120,11 @@ class WEEK_REPORT:
self.str = datetime.datetime.strftime(monday, "%#m.%#d") + "~" + datetime.datetime.strftime(friday, "%#m.%#d") self.str = datetime.datetime.strftime(monday, "%#m.%#d") + "~" + datetime.datetime.strftime(friday, "%#m.%#d")
logger.debug("str: {}".format(self.str)) logger.debug("str: {}".format(self.str))
if __name__ == "__main__": if __name__ == "__main__":
with open("log_config.yaml", 'r') as f: 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) logging.config.dictConfig(config)
logger = logging.getLogger("file_logger") logger = logging.getLogger("file_logger")