天天看點

基于Python操作Word

1.初識Python操作Word

# 導入庫
from docx import Document

# 建立空白文檔
doc_1 = Document()

# 添加标題(0相當于文章的題目,預設級别是1,級别範圍為0-9)
doc_1.add_heading('建立空白文檔标題,級别為0',level = 0)
doc_1.add_heading('建立空白文檔标題,級别為1',level = 1)
doc_1.add_heading('建立空白文檔标題,級别為2',level = 2)

# 新增段落
paragraph_1 = doc_1.add_paragraph('這是第一段文字的開始\n請多多關照!')
# 加粗
paragraph_1.add_run('加粗字型').bold = True
paragraph_1.add_run('普通字型')
# 斜體
paragraph_1.add_run('斜體字型').italic =True

# 新段落(目前段落的下方)
paragraph_2 = doc_1.add_paragraph('新起的第二段文字。')

# 新段落(指定端的上方)
prior_paragraph = paragraph_1.insert_paragraph_before('在第一段文字前插入的段落')

# 添加分頁符(可以進行靈活的排版)
doc_1.add_page_break()
# 新段落(指定端的上方)
paragraph_3 = doc_1.add_paragraph('這是第二頁第一段文字!')

# 儲存檔案(目前目錄下)
doc_1.save('doc_1.docx')
           
基于Python操作Word

2.整體頁面結構

# 導入庫
from docx import Document
from docx.shared import RGBColor, Pt,Inches,Cm
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn

# 建立文檔(Datawhale)
doc_1 = Document()

# 字型設定(全局)
'''隻更改font.name是不夠的,還需要調用._element.rPr.rFonts的set()方法。'''

doc_1.styles['Normal'].font.name = u'宋體'
doc_1.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')

# 添加标題(0相當于文章的題目,預設級别是1,級别範圍為0-9,0時候自動帶下劃線)
#WD_ALIGN_PARAGRAPH. LEFT:左對齊;
#WD_ALIGN_PARAGRAPH. CENTER:居中對其;
#WD_ALIGN_PARAGRAPH. RIGHT:右對齊;
#WD_ALIGN_PARAGRAPH. JUSTIFY:兩端對齊;

heading_1 = doc_1.add_heading('周傑倫',level = 0)
heading_1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER   #居中對齊,預設居左對齊

# 新增段落
paragraph_1 = doc_1.add_paragraph()
'''
設定段落格式:首行縮進0.75cm,居左,段後距離1.0英寸,1.5倍行距。
'''
paragraph_1.paragraph_format.first_line_indent = Cm(0.75)
paragraph_1.paragraph_format.alignment =  WD_PARAGRAPH_ALIGNMENT.LEFT
paragraph_1.paragraph_format.space_after =  Inches(1.0)
paragraph_1.paragraph_format.line_spacing =  1.5

text = '中國台灣華語流行歌手、' \
       '音樂創作家、作曲家、作詞人、' \
       '制作人、傑威爾音樂公司老闆之一、導演。' \
       '近年涉足電影行業。周傑倫是2000年後亞洲流行樂壇最具革命性與名額' \
       '性的創作歌手,有“亞洲流行天王”之稱。他突破原有亞洲音樂的主題、形' \
       '式,融合多元的音樂素材,創造出多變的歌曲風格,尤以融合中西式曲風的嘻哈' \
       '或節奏藍調最為著名,可說是開創華語流行音樂“中國風”的先聲。周傑倫的' \
       '出現打破了亞洲流行樂壇長年停滞不前的局面,為亞洲流行樂壇翻開了新的一頁!'
    
r_1 = paragraph_1.add_run(text)
r_1.font.size =Pt(10)    #字号
r_1.font.bold =True       #加粗
r_1.font.color.rgb =RGBColor(255,0,0)      #顔色

print(len(paragraph_1.runs))    # 檢視段落擁有的run對象數量
print(paragraph_1.runs[0].text)  # 檢視對應run對象的文本等屬性

# 儲存檔案(目前目錄下)
doc_1.save('傑倫.docx')
           
基于Python操作Word

3.字型設定1

'''字型設定1.py'''
#導入庫
from docx import Document
from docx.oxml.ns import qn
from docx.enum.style import WD_STYLE_TYPE

document = Document() # 建立docx文檔

# 設定宋體字樣式
style_font = document.styles.add_style('宋體', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '宋體'
document.styles['宋體']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')

# 設定楷體字樣式
style_font = document.styles.add_style('楷體', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '楷體'
document.styles['楷體']._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷體') 

# 設定華文中宋字樣式
style_font = document.styles.add_style('華文中宋', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '華文中宋'
document.styles['華文中宋']._element.rPr.rFonts.set(qn('w:eastAsia'), u'華文中宋')

paragraph1 = document.add_paragraph() # 添加段落
run = paragraph1.add_run(u'aBCDefg這是中文', style='宋體') # 設定宋體樣式

font = run.font #設定字型
font.name = 'Cambira' # 設定西文字型
paragraph1.add_run(u'aBCDefg這是中文', style='楷體').font.name = 'Cambira'
paragraph1.add_run(u'aBCDefg這是中文', style='華文中宋').font.name = 'Cambira'

document.save('字型設定1.docx')
           
基于Python操作Word

4.字型設定2

'''字型設定2.py'''
#導入庫
from docx import Document
from docx.oxml.ns import qn
from docx.enum.style import WD_STYLE_TYPE

#定義字型設定函數
def font_setting(doc,text,font_cn):
       style_add = doc.styles.add_style(font_cn, WD_STYLE_TYPE.CHARACTER)
       style_add.font.name = font_cn
       doc.styles[font_cn]._element.rPr.rFonts.set(qn('w:eastAsia'), font_cn)
       par = doc.add_paragraph()
       text = par.add_run(text, style=font_cn)

doc = Document()
a = '小朋友 你是否有很多問号'
b = '為什麼 别人在那看漫畫'
c = '我卻在學畫畫 對着鋼琴說話'

font_setting(doc,a,'宋體')
font_setting(doc,b,'華文中宋')
font_setting(doc,c,'黑體')

doc.save('字型設定2.docx')
           
基于Python操作Word

4.插入圖檔和表格

#導入庫
from docx import Document
from docx.shared import Inches

#打開文檔
doc_1 = Document('周傑倫.docx')   #上面腳本存儲的文檔
#新增圖檔
doc_1.add_picture('動漫.jpg',width=Inches(1.0), height=Inches(1.0))

# 建立3行1清單格
table1 = doc_1.add_table(rows=2, cols=1)
table1.style='Medium Grid 1 Accent 1'  #表格樣式很多種,如,Light Shading Accent 1等

# 修改第2行第3列單元格的内容為營口
table1.cell(0, 0).text = '營口'
# 修改第3行第4列單元格的内容為人民
table1.rows[1].cells[0].text = '人民'

# 在表格底部新增一行
row_cells = table1.add_row().cells
# 新增行的第一列添加内容
row_cells[0].text = '加油'

doc_1.save('周傑倫為營口加油.docx')
           
基于Python操作Word

5.設定頁眉頁腳

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

document = Document() # 建立文檔

header = document.sections[0].header # 擷取第一個節的頁眉
print('頁眉中預設段落數:', len(header.paragraphs))
paragraph = header.paragraphs[0] # 擷取頁眉的第一個段落
paragraph.add_run('這是第一節的頁眉') # 添加頁面内容
footer = document.sections[0].footer # 擷取第一個節的頁腳
paragraph = footer.paragraphs[0] # 擷取頁腳的第一個段落
paragraph.add_run('這是第一節的頁腳') # 添加頁腳内容


'''在docx文檔中又添加了2個節,共計3個節,頁面和頁腳會顯示了“與上一節相同”。
如果不使用上一節的内容和樣式要将header.is_linked_to_previous的屬性或footer.is_linked_to_previous的屬性設定為False,
用于解除“連結上一節頁眉”或者“連結上一節頁腳”。'''
document.add_section() # 添加一個新的節
document.add_section() # 添加第3個節
header = document.sections[1].header # 擷取第2個節的頁眉
header.is_linked_to_previous = False # 不使用上節内容和樣式

#對齊設定
header = document.sections[1].header # 擷取第2個節的頁眉
header.is_linked_to_previous = False # 不使用上節内容和樣式
paragraph = header.paragraphs[0]
paragraph.add_run('這是第二節的頁眉')
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 設定頁眉居中對齊
document.sections[1].footer.is_linked_to_previous = False
footer.paragraphs[0].add_run('這是第二節的頁腳') # 添加第2節頁腳内容
footer.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 設定第2節頁腳居中對齊
header = document.sections[2].header # 擷取第3個節的頁眉
header.is_linked_to_previous = False # 不使用上節的内容和樣式
paragraph = header.paragraphs[0] # 擷取頁眉中的段落
paragraph.add_run('這是第三節的頁眉')
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT # 設定頁眉右對齊
document.sections[2].footer.is_linked_to_previous = False
footer.paragraphs[0].add_run('這是第三節的頁腳') # 添加第3節頁腳内容
footer.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT # 設定第3節頁腳右對齊
document.save('頁眉頁腳1.docx') # 儲存文檔