基于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
call conda activate fbh_base
call .\week_report\Scripts\activate
python gen_word.py
pause

View File

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

View File

@ -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()
week_report.update_file()