###### 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)
```