-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils_word.py
More file actions
62 lines (53 loc) · 1.79 KB
/
utils_word.py
File metadata and controls
62 lines (53 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from loguru import logger
import win32com.client as win32
from utils_logger import log_execution
@log_execution()
def perform_mail_merge(template_doc_path, data_csv_path, output_pdf_path):
''' Выполняем слияние данных и экспорт в pdf'''
logger.info("Запуск Word...")
word = None
doc = None
merged_doc = None
try:
word = win32.DispatchEx("Word.Application")
logger.info("Запустили Word")
word.Visible = False
word.DisplayAlerts = 0
word.ScreenUpdating = False
doc = word.Documents.Open(str(template_doc_path))
merge = doc.MailMerge
merge.OpenDataSource(
Name=str(data_csv_path),
ConfirmConversions=False,
ReadOnly=True,
LinkToSource=True,
AddToRecentFiles=False,
SubType=0 #win32.constants.wdMergeSubTypeOther
)
merge.Execute()
logger.info("Выполнили merge")
merged_doc = word.ActiveDocument
merged_doc.Fields.Update()
merged_doc.ExportAsFixedFormat(output_pdf_path, 17) #win32.constants.wdExportFormatPDF
logger.info(f"PDF сохранен: {output_pdf_path}")
merged_doc.Close(False)
return True
except Exception:
logger.exception("Ошибка при выполнении Mail Merge в Word")
raise
finally:
if merged_doc is not None:
try:
merged_doc.Close(False)
except Exception:
pass
if doc is not None:
try:
doc.Close(False)
except Exception:
pass
if word is not None:
try:
word.Quit()
except Exception:
pass