Try   HackMD
tags: python

python讀取/修改Word

安裝套件

pip3 install python-docx

Word文件結構

  • document: 代表整個word檔
    • paragraph:代表段落
      • run:代表相同樣式的連續文字

讀取word檔內容

  • 從google搜尋「606 如何使布丁凝結的更快」(也可以找其他word檔案)
  • 記得另存成docx格式檔
import docx doc = docx.Document('606 如何使布丁凝結的更快.docx') print('段落數量: ', len(doc.paragraphs)) for para in doc.paragraphs: print(para.text)

讀取每個run的內容

import docx doc = docx.Document('606 如何使布丁凝結的更快.docx') para = doc.paragraphs[11] print(para.text + '\n') print('run數量: ', len(para.runs)) for i in range(0, len(para.runs)): print(i, para.runs[i].text)

寫入word檔

import docx doc = docx.Document() doc.add_heading('AI 技術可以讓隱藏於暗處的物品現形', level=1) doc.add_heading('資料來源', level=2) doc.add_paragraph('Engadget中文版') doc.add_heading('內文', level=2) doc.add_paragraph('在幾乎完全沒有光線的環境中,相信任何人都無法清楚看到大部分的物體,但對 AI 來說或許不是件難事。麻省理工學院的科學家近來開發出一種技術,能透過深度神經網路在幾乎沒有光線的環境下,看見其中的物體。為了讓神經網路培養出這樣的能力,該團隊利用了一萬張黑暗、充滿噪點,甚至是沒有對焦的圖片,搭配上在其中存在的物品的圖片,對其進行訓練。而這樣的方式,不僅讓神經網路了解應該辨識出什麼物品,也能訓練其在微弱的光源下該如何從畫面中凸顯出該辨識的目標。除此之外,研究人員也給神經網路上了一堂物理課,讓它理解沒有對焦的相機是如何產生出模糊的圖片,藉此來應付這類情況下的畫面。') doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

找出所有標題文字

import docx doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') for paragraph in doc.paragraphs: if paragraph.style.name.startswith('Heading'): print(paragraph.text)

調整所有標題文字樣式

顏色表

import docx from docx.shared import RGBColor doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') for paragraph in doc.paragraphs: if paragraph.style.name.startswith('Heading'): for run in paragraph.runs: run.font.color.rgb = RGBColor(18, 255, 0) print(run.text) doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

調整字型、大小

import docx from docx.shared import RGBColor from docx.shared import Cm, Pt #加入可調整的 word 單位 doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') for paragraph in doc.paragraphs: if paragraph.style.name.startswith('Heading'): for run in paragraph.runs: run.font.color.rgb = RGBColor(18, 255, 0) run.font.name = 'New Times Roman' run.font.size = Pt(10) print(run.text) doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

文字置左、置中、置右

import docx from docx.shared import RGBColor from docx.shared import Cm, Pt #加入可調整的 word 單位 from docx.oxml.ns import qn from docx.enum.text import WD_ALIGN_PARAGRAPH #處理字串的置中 doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') for paragraph in doc.paragraphs: if paragraph.style.name.startswith('Heading'): paragraph.paragraph_format.alignment=WD_ALIGN_PARAGRAPH.CENTER # LEFT, CENTER, RIGHT for run in paragraph.runs: run.font.color.rgb = RGBColor(18, 255, 0) run.font.name = '標楷體' run._element.rPr.rFonts.set(qn('w:eastAsia'), u'標楷體') run.font.size = Pt(18) print(run.text) doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

調整字型、大小

import docx
from docx.shared import RGBColor
from docx.shared import Cm, Pt  #加入可調整的 word 單位
from docx.oxml.ns import qn

doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx')



for paragraph in doc.paragraphs:
    if paragraph.style.name.startswith('Heading'):
        for run in paragraph.runs:
            run.font.color.rgb = RGBColor(18, 255, 0)
            
            run.font.name = '標楷體'
            run._element.rPr.rFonts.set(qn('w:eastAsia'), u'標楷體') # 中文字型要多加這一列
            run.font.size = Pt(18)
            print(run.text)

doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

調整紙張邊界

import docx from docx.shared import RGBColor from docx.shared import Cm, Pt #加入可調整的 word 單位 from docx.enum.text import WD_ALIGN_PARAGRAPH doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') section = doc.sections[0] #調整文件左右上下邊界至 1.27 cm section.left_margin=Cm(1.27) section.right_margin=Cm(1.27) section.top_margin=Cm(1.27) section.bottom_margin=Cm(1.27) doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

調整紙張

import docx from docx.shared import RGBColor from docx.shared import Cm, Pt #加入可調整的 word 單位 from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.section import WD_ORIENT #處理文件的直向/橫向 doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') section = doc.sections[0] # 節 print("orientation: ", section.orientation) print("page_width: ", section.page_width) print("page_height: ", section.page_height, '\n') section.orientation = WD_ORIENT.LANDSCAPE # 調整橫式紙張 new_width, new_height = Cm(29.7), Cm(21) section.page_width = new_width section.page_height= new_height print("orientation: ", section.orientation) print("page_width: ", section.page_width) print("page_height: ", section.page_height) doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

插入圖片

import docx from docx.shared import Cm #加入可調整的 word 單位 doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') doc.add_picture("view.jpg", width=Cm(18)) doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

插入表格

import docx from docx.shared import Cm #加入可調整的 word 單位 doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') records = ( ('amos', '12345678', 'teacher'), ('carol', '23456789', 'student'), ('frank', '34567890', 'engineer') ) table = doc.add_table(rows=1, cols=3) hdr_cells = table.rows[0].cells hdr_cells[0].text = '姓名' hdr_cells[1].text = '電話' hdr_cells[2].text = '職稱' for name, tel, title in records: row_cells = table.add_row().cells row_cells[0].text = name row_cells[1].text = tel row_cells[2].text = title doc.save('AI 技術可以讓隱藏於暗處的物品現形.docx')

插入分頁符號

doc.add_page_break()

顯示python-docx支援的所有樣式名稱

for style in doc.styles: print(style.name)