|
|
|
@ -1,4 +1,5 @@
|
|
|
|
import logging
|
|
|
|
import logging
|
|
|
|
|
|
|
|
from multiprocessing.spawn import old_main_modules
|
|
|
|
|
|
|
|
|
|
|
|
from docx.oxml.ns import qn
|
|
|
|
from docx.oxml.ns import qn
|
|
|
|
from docx.shared import Pt
|
|
|
|
from docx.shared import Pt
|
|
|
|
@ -8,18 +9,60 @@ logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
#excluded_list = ['{{year}}','{{month}}', '{{day}}']
|
|
|
|
#excluded_list = ['{{year}}','{{month}}', '{{day}}']
|
|
|
|
# 将文档中的字符串变量替换成提取内容
|
|
|
|
# 将文档中的字符串变量替换成提取内容
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
def replace_text_in_paragraph(paragraph, old_text, new_text):
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
runs = list(paragraph.runs) # 先复制一份,避免边遍历边修改
|
|
|
|
|
|
|
|
for run in runs:
|
|
|
|
|
|
|
|
if old_text in run.text:
|
|
|
|
|
|
|
|
# 1. 拆分 run:把 old_text 前后拆开
|
|
|
|
|
|
|
|
before, old, after = run.text.partition(old_text)
|
|
|
|
|
|
|
|
run.clear()
|
|
|
|
|
|
|
|
paragraph.add_run(before)
|
|
|
|
|
|
|
|
target_run = paragraph.add_run(new_text)
|
|
|
|
|
|
|
|
paragraph.add_run(after)
|
|
|
|
|
|
|
|
# 3. 仅给目标 run 加粗 + 字体
|
|
|
|
|
|
|
|
if old_text == "{{sentiment_trend}}":
|
|
|
|
|
|
|
|
target_run.bold = True
|
|
|
|
|
|
|
|
target_run.font.name = "Times New Roman"
|
|
|
|
|
|
|
|
target_run._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')
|
|
|
|
|
|
|
|
target_run.font.size = Pt(16)
|
|
|
|
|
|
|
|
elif old_text.startswith('{{') and old_text.endswith('}}'):
|
|
|
|
|
|
|
|
# 其它模板只改字体、字号,不加粗
|
|
|
|
|
|
|
|
target_run.font.name = "Times New Roman"
|
|
|
|
|
|
|
|
target_run._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')
|
|
|
|
|
|
|
|
target_run.font.size = Pt(16)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
|
|
logger.exception(f"替换段落里的文本失败:{e}")
|
|
|
|
|
|
|
|
print(f"替换段落里的文本失败:{e}")
|
|
|
|
|
|
|
|
"""
|
|
|
|
def replace_text_in_paragraph(paragraph, old_text, new_text):
|
|
|
|
def replace_text_in_paragraph(paragraph, old_text, new_text):
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
if old_text in paragraph.text: # 检查段落中是否存在模板字符串
|
|
|
|
if old_text in paragraph.text: # 检查段落中是否存在模板字符串
|
|
|
|
# 遍历段落的每个运行
|
|
|
|
# 遍历段落的每个运行
|
|
|
|
for run in paragraph.runs:
|
|
|
|
for run in paragraph.runs:
|
|
|
|
if old_text in run.text:
|
|
|
|
if old_text =="{{sentiment_trend}}":
|
|
|
|
run.text = run.text.replace(old_text, new_text)
|
|
|
|
print("定制化加粗")
|
|
|
|
if old_text.startswith('{{') :
|
|
|
|
if old_text in run.text:
|
|
|
|
run.font.name = "Times New Roman"
|
|
|
|
before, old, after = run.text.partition(old_text)
|
|
|
|
#run.font.name = "仿宋"
|
|
|
|
run.clear()
|
|
|
|
run._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')
|
|
|
|
paragraph.add_run(before)
|
|
|
|
run.font.size = Pt(16)
|
|
|
|
target_run = paragraph.add_run(new_text)
|
|
|
|
|
|
|
|
paragraph.add_run(after)
|
|
|
|
|
|
|
|
if old_text == "{{sentiment_trend}}":
|
|
|
|
|
|
|
|
target_run.bold = True
|
|
|
|
|
|
|
|
target_run.font.name = "Times New Roman"
|
|
|
|
|
|
|
|
target_run._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')
|
|
|
|
|
|
|
|
target_run.font.size = Pt(16)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
if old_text in run.text:
|
|
|
|
|
|
|
|
run.text = run.text.replace(old_text, new_text)
|
|
|
|
|
|
|
|
if old_text.startswith('{{') :
|
|
|
|
|
|
|
|
run.font.name = "Times New Roman"
|
|
|
|
|
|
|
|
#run.font.name = "仿宋"
|
|
|
|
|
|
|
|
run._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')
|
|
|
|
|
|
|
|
run.font.size = Pt(16)
|
|
|
|
except Exception as e:
|
|
|
|
except Exception as e:
|
|
|
|
logger.exception(f"替换段落里的文本失败:{e}")
|
|
|
|
logger.exception(f"替换段落里的文本失败:{e}")
|
|
|
|
print(f"替换段落里的文本失败:{e}")
|
|
|
|
print(f"替换段落里的文本失败:{e}")
|
|
|
|
|