python办公自动化博客_自动化办公 Python 操控 Word
雖然Word不好用, 但還必須得用它, python-docx是專門用于編輯Word文檔的一個工具庫, 它有兩大用途, 自動化生成word文檔 and 自動化修改文檔
python word
1. 自定義樣式
自定義樣式
python可以自定義三類樣式段落樣式
字符樣式
表格樣式(一般用不到)這三類樣式的創建方式基本一致, 只是創建參數 略有不同(1為段落樣式, 2為字符樣式, 3為表格樣式)
以設置段落樣式為例# 創建自定義段落樣式(第一個參數為樣式名, 第二個參數為樣式類型, 1為段落樣式, 2為字符樣式, 3為表格樣式)
UserStyle1 = document.styles.add_style('UserStyle1', 1)
# 設置字體尺寸
UserStyle1.font.size = Pt(40)
# 設置字體顏色
UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)
# 居中文本
UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 設置中文字體
UserStyle1.font.name = '微軟雅黑'
UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')
2.理解結構關系
結構關系往文檔中插入文本內容, 首先要插入一個段落, 段落后面可追加字符, 但文檔不能直接插入字符
段落之間會自動以 回車符號 分隔
段落 和 字符 可 各自設置獨立的樣式
實例: 插入段落, 插入段落后追加字符# 使用自定義段落樣式
document.add_paragraph('自定義段落樣式', style = UserStyle1)
# 使用自定義字符樣式
document.add_paragraph('').add_run('正月里采花無喲花采,二月間采花花喲正開,二月間采花花喲正開。三月里桃花紅喲似海,四月間葡萄架喲上開,四月間葡萄架喲上開。', style = UserStyle2)
3. 插入圖片python-docx支持將圖片插入文檔, 且可以設置圖片大小
插入圖片
實例代碼:document.add_picture('少女17087938.jpg', width=Inches(5))
4.插入列表
插入列表
插入有序列表document.add_paragraph('把冰箱門打開', style='List Number')
document.add_paragraph('把大象裝進去', style='List Number')
document.add_paragraph('把冰箱門關上', style='List Number')
插入無序列表document.add_paragraph('天地匆匆 驚鴻而過 路有千百個', style='List Bullet')
document.add_paragraph('遑遑無歸 閑云逸鶴 人間紅塵過', style='List Bullet')
document.add_paragraph('引勢而流 鴻門亂局 各有各選擇', style='List Bullet')
document.add_paragraph('乾震坎艮 坤巽離兌 定一切生克', style='List Bullet')
5.插入表格
插入表格把表格看做二維數組, 然后往數組中填數據rows_num = 5
cols_num = 6
table = document.add_table(rows=rows_num, cols=cols_num, style = 'Table Grid')
for r in range(rows_num):
for c in range(cols_num):
table.cell(r, c).text = "第{r}行{c}列".format(r = r+1, c = c+1)
完整源碼:from docx import Document
from docx.shared import Inches
from docx.dml.color import ColorFormat
from docx.shared import Pt
from docx.shared import RGBColor
from docx.oxml.ns import qn
from docx.enum.style import WD_STYLE_TYPE
from docx.enum.text import WD_ALIGN_PARAGRAPH
def main():
# 創建文檔對象
document = Document()
# 設置默認字體
document.styles['Normal'].font.name = '微軟雅黑'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')
# 創建自定義段落樣式(第一個參數為樣式名, 第二個參數為樣式類型, 1為段落樣式, 2為字符樣式, 3為表格樣式)
UserStyle1 = document.styles.add_style('UserStyle1', 1)
# 設置字體尺寸
UserStyle1.font.size = Pt(40)
# 設置字體顏色
UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)
# 居中文本
UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 設置中文字體
UserStyle1.font.name = '微軟雅黑'
UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')
# 創建自定義字符樣式(第一個參數為樣式名, 第二個參數為樣式類型, 1為段落樣式, 2為字符樣式, 3為表格樣式)
UserStyle2 = document.styles.add_style('UserStyle2', 2)
# 設置字體尺寸
UserStyle2.font.size = Pt(15)
# 設置字體顏色0c8ac5
UserStyle2.font.color.rgb = RGBColor(0x0c, 0x8a, 0xc5)
# 設置段落樣式為宋體
UserStyle2.font.name = '宋體'
UserStyle2._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
# 使用自定義段落樣式
document.add_paragraph('自定義段落樣式', style = UserStyle1)
# 使用自定義字符樣式
document.add_paragraph('').add_run('正月里采花無喲花采,二月間采花花喲正開,二月間采花花喲正開。三月里桃花紅喲似海,四月間葡萄架喲上開,四月間葡萄架喲上開。', style = UserStyle2)
# 設置粗體字
document.add_paragraph('設置粗體字:').add_run('粗體字').bold = True
# 設置斜體字
document.add_paragraph('設置斜體字:').add_run('斜體字').italic = True
# 設置字號50
document.add_paragraph('設置字號50:').add_run('50').font.size = Pt(50)
# 設置字體顏色為 af2626
document.add_paragraph('設置字體顏色:').add_run('顏色').font.color.rgb = RGBColor(0xaf, 0x26, 0x26)
# 樣式疊加: 將字體改到30號并且將字體改成特定顏色;
doubleStyle = document.add_paragraph('同時設置文字顏色和字號:').add_run('顏色和尺寸')
doubleStyle.font.size = Pt(30)
doubleStyle.font.color.rgb = RGBColor(0xaf, 0x26, 0x26)
# 添加分頁符
document.add_page_break()
# 創建 有序列表
document.add_paragraph('').add_run('有序列表').font.size = Pt(30)
document.add_paragraph('把冰箱門打開', style='List Number')
document.add_paragraph('把大象裝進去', style='List Number')
document.add_paragraph('把冰箱門關上', style='List Number')
# 創建 無序列表
document.add_paragraph('').add_run('無序列表').font.size = Pt(30)
document.add_paragraph('天地匆匆 驚鴻而過 路有千百個', style='List Bullet')
document.add_paragraph('遑遑無歸 閑云逸鶴 人間紅塵過', style='List Bullet')
document.add_paragraph('引勢而流 鴻門亂局 各有各選擇', style='List Bullet')
document.add_paragraph('乾震坎艮 坤巽離兌 定一切生克', style='List Bullet')
# 添加分頁符
document.add_page_break()
# 添加圖片
document.add_paragraph('').add_run('添加圖片').font.size = Pt(30)
document.add_picture('少女17087938.jpg', width=Inches(5))
# 添加分頁符
document.add_page_break()
document.add_paragraph('').add_run('創建表格').font.size = Pt(30)
# 創建兩行兩列的表格
rows_num = 5
cols_num = 6
table = document.add_table(rows=rows_num, cols=cols_num, style = 'Table Grid')
for r in range(rows_num):
for c in range(cols_num):
table.cell(r, c).text = "第{r}行{c}列".format(r = r+1, c = c+1)
# 保存文檔
document.save('Python生成的文檔.docx')
if __name__ == '__main__':
main()將源碼保存為單獨的python文件后,安裝python-docx, 找一張圖片,命名為少女17087938.jpg, 將圖片與python文件放到同一個目錄, 然后再python3環境下運行python文件即可! 最后附測試圖片一張:
少女17087938.jpg
最終效果:
最終效果.png
自動化修改文檔
保留格式并替換實例: 將當前目錄下, 所有docx文件內的"海南大學", 替換為"Hainan University", 并將新文件添加前綴new后, 保存到當前目錄下
轉換前
轉換后
終端打印import docx
import os
import re
# 傳入三個參數, 舊字符串, 新字符串, 文件對象
def replace_text(old_text, new_text, file):
# 遍歷文件對象
for f in file.paragraphs:
# 如果 舊字符串 在 某個段落 中
if old_text in f.text:
print("替換前:", f.text)
# 將段落存入 inline
inline = f.runs
# 遍歷 段落 生成 i
for i in inline:
# 如果 舊字符串 在 i 中
if old_text in i.text:
# 替換 i.text 內文本資源
text = i.text.replace(old_text, new_text)
i.text = text
print("替換后===>", f.text)
def main():
# 獲取當前目錄下所有的文件名列表
old_file_names = os.listdir()
# 獲取所有docx文件名列表
docx_file_names = []
for old_file_name in old_file_names:
if re.match(r'^[^~].*\.docx', old_file_name):
print(old_file_name)
docx_file_names.append(old_file_name)
for docx_file_name in docx_file_names:
try:
# 獲取文件對象
file=docx.Document(docx_file_name)
# 三個參數: 舊的字符串, 新的字符串, 文件對象
print("開始替換:", docx_file_name)
replace_text('海南大學', 'Hainan University', file)
file.save('new_'+docx_file_name)
print(docx_file_name, "替換成功")
except:
print(docx_file_name, "替換失敗")
pass
if __name__ == '__main__':
main()
總結
以上是生活随笔為你收集整理的python办公自动化博客_自动化办公 Python 操控 Word的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深井软岩巷道群支护技术与应用_引领支护创
- 下一篇: App性能优化之内存优化