###### tags: `python` # python讀取/修改Word ## 安裝套件 ```shell= pip3 install python-docx ``` ## Word文件結構 - document: **代表整個word檔** - paragraph:**代表段落** - run:**代表相同樣式的連續文字** ## 讀取word檔內容 - 從google搜尋「606 如何使布丁凝結的更快」(也可以找其他word檔案) - 記得另存成docx格式檔 ```python= import docx doc = docx.Document('606 如何使布丁凝結的更快.docx') print('段落數量: ', len(doc.paragraphs)) for para in doc.paragraphs: print(para.text) ``` ## 讀取每個run的內容 ```python= 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檔 ```python= 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') ``` ## 找出所有標題文字 ```python= import docx doc = docx.Document('AI 技術可以讓隱藏於暗處的物品現形.docx') for paragraph in doc.paragraphs: if paragraph.style.name.startswith('Heading'): print(paragraph.text) ``` ## 調整所有標題文字樣式 [顏色表](https://htmlcolorcodes.com/color-chart/) ```python= 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') ``` ## 調整字型、大小 ```python= 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') ``` ## 文字置左、置中、置右 ```python= 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') ``` ## 調整字型、大小 ```python 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') ``` ## 調整紙張邊界 ```python= 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') ``` ## 調整紙張 ```python= 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') ``` ## 插入圖片 ```python= 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') ``` ## 插入表格 ```python= 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') ``` ## 插入分頁符號 ```python= doc.add_page_break() ``` ## 顯示python-docx支援的所有樣式名稱 ```python= for style in doc.styles: print(style.name) ```