關于python操作文檔的問題
文檔類型:docx
語言:python我想在文檔中姓名后面的下劃線之上插入一個姓名,并保存為新的文檔,
用python應該怎么實現呢
文檔見下圖
一般情況下,我們在看到題目的時候,應該先審題,看題目中有哪些難點,就是那些比較難以實現的點,比較費時費力的點,比較模糊不清的點,這些點都要提煉出來。
這個題目也是比較簡單的,先按照我們常規的人工思想來思考這個問題該怎么解決:
如果是我們人工處理的話,就是單擊到姓名后面的下劃線,然后輸入一個真實姓名,接著另存為另一個文檔名字就可以了。
那如果要程序應該怎么處理呢?
通過之前的文章我們知道,python+selenium是可以錄制操作步驟進行自動化操作的,這是一個解決問題的思路,通過錄制操作步驟導出代碼進行修改可以實現。
但是這種方式比較繁瑣,通過查找資料,python有第三方庫可以處理word:python-docx
官網例子:
```python
# 導入docx庫中的Document類和Inches類
from docx import Document
from docx.shared import Inches# 創建一個Document對象
document = Document()# 添加一個標題,級別為0
document.add_heading('文檔標題', 0)# 添加一個段落,內容為"A plain paragraph having some "
p = document.add_paragraph('A plain paragraph having some ')
# 在段落中添加加粗文本"bold"
p.add_run('bold').bold = True
# 在段落中添加普通文本" and some "
p.add_run(' and some ')
# 在段落中添加斜體文本"italic."
p.add_run('italic.').italic = True# 添加一個一級標題
document.add_heading('Heading, level 1', level=1)
# 添加一個引用樣式的段落
document.add_paragraph('Intense quote', style='Intense Quote')# 添加一個無序列表項
document.add_paragraph('first item in unordered list', style='List Bullet'
)
# 添加一個有序列表項
document.add_paragraph('first item in ordered list', style='List Number'
)# 添加一張圖片,寬度為1.25英寸
document.add_picture('monty-truth.png', width=Inches(1.25))# 定義一個記錄列表,包含三個元組,每個元組包含三個元素:數量、ID和描述
records = ((3, '101', 'Spam'),(7, '422', 'Eggs'),(4, '631', 'Spam, spam, eggs, and spam')
)# 添加一個表格,1行3列
table = document.add_table(rows=1, cols=3)
# 獲取表格的第一行單元格
hdr_cells = table.rows[0].cells
# 設置第一行單元格的文本內容
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
# 遍歷記錄列表,為表格添加行和單元格,并設置單元格的文本內容
for qty, id, desc in records:row_cells = table.add_row().cellsrow_cells[0].text = str(qty)row_cells[1].text = idrow_cells[2].text = desc# 添加一個分頁符
document.add_page_break()# 保存文檔為demo.docx
document.save('demo.docx')
```
?最終效果:
最后來看看我們帶下劃線的word怎么處理:
from docx import Document# 打開原始文檔
doc = Document('doc.docx')# 遍歷文檔中的所有段落
for para in doc.paragraphs:# 尋找包含“姓名:”的段落if '姓名:' in para.text:# 提取姓名行的文本text = para.text# 查找“姓名:”和“性別:”的位置name_start = text.find('姓名:') + len('姓名:')underscore_index = text.find('_', name_start) # 找到姓名后的下劃線位置gender_start = text.find('性別:') # 找到“性別:”的位置# 確保下劃線和“性別:”都存在if underscore_index != -1 and gender_start != -1:# 計算插入位置和原有姓名(不包括下劃線)insert_pos = underscore_indexoriginal_name = text[name_start:underscore_index].strip()# 清除原有段落內容para.clear()# 重新構建段落內容# 先添加“姓名:”及原姓名部分直到下劃線前para.add_run(f'姓名:{original_name}')# 在下劃線正上方插入真實姓名(這里以"張三"為例,請替換為實際姓名)real_name = "張三"para.add_run(real_name).underline = True # 保持下劃線樣式# 繼續添加下劃線和剩余的文本,注意處理下劃線和“性別:”之間的空白para.add_run('_' + text[underscore_index+1:gender_start].strip())# 添加“性別:”及其之后的內容para.add_run(text[gender_start:])# 保存到新文檔
doc.save('newdoc.docx')
最終效果:
問題來源:
關于python操作文檔的問題_編程語言-CSDN問答