This commit is contained in:
fengbohan 2023-08-16 15:27:12 +08:00
commit 87e00cdfcb
2 changed files with 90 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.doc
*.tmp

88
gen_word.py Normal file
View File

@ -0,0 +1,88 @@
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()