week_report/gen_word.py

93 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import time
import datetime
from docx import Document
from docx.shared import Inches
import win32com
from win32com.client import Dispatch, constants
import os
import sys
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))
if(os.path.isfile(self.file_name)==True):
print("{} is already exist.".format(self.file_name))
sys.exit(1)
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()