58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
|
from docx import Document
|
||
|
|
||
|
def search_and_replace(filename: str, find_text: str, replace_text: str) -> str:
|
||
|
"""替换所有find_text为replace_text
|
||
|
|
||
|
Args:
|
||
|
filename: Path to the Word document
|
||
|
find_text: Text to search for
|
||
|
replace_text: Text to replace with
|
||
|
"""
|
||
|
try:
|
||
|
doc = Document(filename)
|
||
|
|
||
|
# Perform find and replace
|
||
|
count = find_and_replace_text(doc, find_text, replace_text)
|
||
|
|
||
|
if count > 0:
|
||
|
doc.save(filename)
|
||
|
return f"Replaced {count} occurrence(s) of '{find_text}' with '{replace_text}'."
|
||
|
else:
|
||
|
return f"No occurrences of '{find_text}' found."
|
||
|
except Exception as e:
|
||
|
return f"Failed to search and replace: {str(e)}"
|
||
|
|
||
|
def find_and_replace_text(doc, old_text, new_text):
|
||
|
"""
|
||
|
Find and replace text throughout the document.
|
||
|
|
||
|
Args:
|
||
|
doc: Document object
|
||
|
old_text: Text to find
|
||
|
new_text: Text to replace with
|
||
|
|
||
|
Returns:
|
||
|
Number of replacements made
|
||
|
"""
|
||
|
count = 0
|
||
|
|
||
|
# Search in paragraphs
|
||
|
for para in doc.paragraphs:
|
||
|
if old_text in para.text:
|
||
|
for run in para.runs:
|
||
|
if old_text in run.text:
|
||
|
run.text = run.text.replace(old_text, new_text)
|
||
|
count += 1
|
||
|
|
||
|
# Search in tables
|
||
|
for table in doc.tables:
|
||
|
for row in table.rows:
|
||
|
for cell in row.cells:
|
||
|
for para in cell.paragraphs:
|
||
|
if old_text in para.text:
|
||
|
for run in para.runs:
|
||
|
if old_text in run.text:
|
||
|
run.text = run.text.replace(old_text, new_text)
|
||
|
count += 1
|
||
|
|
||
|
return count
|