日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

《自動化辦公》Python

 Four兄 2019-08-25

雖然Word不好用, 但還必須得用它, python-docx是專門用于編輯Word文檔的一個工具庫, 它有兩大用途, 自動化生成word文檔 and 自動化修改文檔

1. 自定義樣式

python可以自定義三類樣式

  • 段落樣式
  • 字符樣式
  • 表格樣式(一般用不到)

這三類樣式的創(chuàng)建方式基本一致, 只是創(chuàng)建參數(shù) 略有不同(1為段落樣式, 2為字符樣式, 3為表格樣式)

以設(shè)置段落樣式為例

  1. # 創(chuàng)建自定義段落樣式(第一個參數(shù)為樣式名, 第二個參數(shù)為樣式類型, 1為段落樣式, 2為字符樣式, 3為表格樣式)
  2. UserStyle1 = document.styles.add_style('UserStyle1', 1)
  3. # 設(shè)置字體尺寸
  4. UserStyle1.font.size = Pt(40)
  5. # 設(shè)置字體顏色
  6. UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)
  7. # 居中文本
  8. UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
  9. # 設(shè)置中文字體
  10. UserStyle1.font.name = '微軟雅黑'
  11. UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')
  12. 復(fù)制代碼

2.理解結(jié)構(gòu)關(guān)系

  • 往文檔中插入文本內(nèi)容, 首先要插入一個段落, 段落后面可追加字符, 但文檔不能直接插入字符
  • 段落之間會自動以 回車符號 分隔
  • 段落 和 字符 可 各自設(shè)置獨立的樣式

實例: 插入段落, 插入段落后追加字符

  1. # 使用自定義段落樣式
  2. document.add_paragraph('自定義段落樣式', style = UserStyle1)
  3. # 使用自定義字符樣式
  4. document.add_paragraph('').add_run('正月里采花無喲花采,二月間采花花喲正開,二月間采花花喲正開。三月里桃花紅喲似海,四月間葡萄架喲上開,四月間葡萄架喲上開。', style = UserStyle2)
  5. 復(fù)制代碼

3. 插入圖片

python-docx支持將圖片插入文檔, 且可以設(shè)置圖片大小

實例代碼:

  1. document.add_picture('少女17087938.jpg', width=Inches(5))
  2. 復(fù)制代碼

4.插入列表

插入有序列表

  1. document.add_paragraph('把冰箱門打開', style='List Number')
  2. document.add_paragraph('把大象裝進去', style='List Number')
  3. document.add_paragraph('把冰箱門關(guān)上', style='List Number')
  4. 復(fù)制代碼

插入無序列表

  1. document.add_paragraph('天地匆匆 驚鴻而過 路有千百個', style='List Bullet')
  2. document.add_paragraph('遑遑無歸 閑云逸鶴 人間紅塵過', style='List Bullet')
  3. document.add_paragraph('引勢而流 鴻門亂局 各有各選擇', style='List Bullet')
  4. document.add_paragraph('乾震坎艮 坤巽離兌 定一切生克', style='List Bullet')
  5. 復(fù)制代碼

5.插入表格

把表格看做二維數(shù)組, 然后往數(shù)組中填數(shù)據(jù)

  1. rows_num = 5
  2. cols_num = 6
  3. table = document.add_table(rows=rows_num, cols=cols_num, style = 'Table Grid')
  4. for r in range(rows_num):
  5. for c in range(cols_num):
  6. table.cell(r, c).text = '第{r}行{c}列'.format(r = r+1, c = c+1)
  7. 復(fù)制代碼

完整源碼:

  1. from docx import Document
  2. from docx.shared import Inches
  3. from docx.dml.color import ColorFormat
  4. from docx.shared import Pt
  5. from docx.shared import RGBColor
  6. from docx.oxml.ns import qn
  7. from docx.enum.style import WD_STYLE_TYPE
  8. from docx.enum.text import WD_ALIGN_PARAGRAPH
  9. def main():
  10. # 創(chuàng)建文檔對象
  11. document = Document()
  12. # 設(shè)置默認字體
  13. document.styles['Normal'].font.name = '微軟雅黑'
  14. document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')
  15. # 創(chuàng)建自定義段落樣式(第一個參數(shù)為樣式名, 第二個參數(shù)為樣式類型, 1為段落樣式, 2為字符樣式, 3為表格樣式)
  16. UserStyle1 = document.styles.add_style('UserStyle1', 1)
  17. # 設(shè)置字體尺寸
  18. UserStyle1.font.size = Pt(40)
  19. # 設(shè)置字體顏色
  20. UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)
  21. # 居中文本
  22. UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
  23. # 設(shè)置中文字體
  24. UserStyle1.font.name = '微軟雅黑'
  25. UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')
  26. # 創(chuàng)建自定義字符樣式(第一個參數(shù)為樣式名, 第二個參數(shù)為樣式類型, 1為段落樣式, 2為字符樣式, 3為表格樣式)
  27. UserStyle2 = document.styles.add_style('UserStyle2', 2)
  28. # 設(shè)置字體尺寸
  29. UserStyle2.font.size = Pt(15)
  30. # 設(shè)置字體顏色0c8ac5
  31. UserStyle2.font.color.rgb = RGBColor(0x0c, 0x8a, 0xc5)
  32. # 設(shè)置段落樣式為宋體
  33. UserStyle2.font.name = '宋體'
  34. UserStyle2._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
  35. # 使用自定義段落樣式
  36. document.add_paragraph('自定義段落樣式', style = UserStyle1)
  37. # 使用自定義字符樣式
  38. document.add_paragraph('').add_run('正月里采花無喲花采,二月間采花花喲正開,二月間采花花喲正開。三月里桃花紅喲似海,四月間葡萄架喲上開,四月間葡萄架喲上開。', style = UserStyle2)
  39. # 設(shè)置粗體字
  40. document.add_paragraph('設(shè)置粗體字:').add_run('粗體字').bold = True
  41. # 設(shè)置斜體字
  42. document.add_paragraph('設(shè)置斜體字:').add_run('斜體字').italic = True
  43. # 設(shè)置字號50
  44. document.add_paragraph('設(shè)置字號50:').add_run('50').font.size = Pt(50)
  45. # 設(shè)置字體顏色為 af2626
  46. document.add_paragraph('設(shè)置字體顏色:').add_run('顏色').font.color.rgb = RGBColor(0xaf, 0x26, 0x26)
  47. # 樣式疊加: 將字體改到30號并且將字體改成特定顏色;
  48. doubleStyle = document.add_paragraph('同時設(shè)置文字顏色和字號:').add_run('顏色和尺寸')
  49. doubleStyle.font.size = Pt(30)
  50. doubleStyle.font.color.rgb = RGBColor(0xaf, 0x26, 0x26)
  51. # 添加分頁符
  52. document.add_page_break()
  53. # 創(chuàng)建 有序列表
  54. document.add_paragraph('').add_run('有序列表').font.size = Pt(30)
  55. document.add_paragraph('把冰箱門打開', style='List Number')
  56. document.add_paragraph('把大象裝進去', style='List Number')
  57. document.add_paragraph('把冰箱門關(guān)上', style='List Number')
  58. # 創(chuàng)建 無序列表
  59. document.add_paragraph('').add_run('無序列表').font.size = Pt(30)
  60. document.add_paragraph('天地匆匆 驚鴻而過 路有千百個', style='List Bullet')
  61. document.add_paragraph('遑遑無歸 閑云逸鶴 人間紅塵過', style='List Bullet')
  62. document.add_paragraph('引勢而流 鴻門亂局 各有各選擇', style='List Bullet')
  63. document.add_paragraph('乾震坎艮 坤巽離兌 定一切生克', style='List Bullet')
  64. # 添加分頁符
  65. document.add_page_break()
  66. # 添加圖片
  67. document.add_paragraph('').add_run('添加圖片').font.size = Pt(30)
  68. document.add_picture('少女17087938.jpg', width=Inches(5))
  69. # 添加分頁符
  70. document.add_page_break()
  71. document.add_paragraph('').add_run('創(chuàng)建表格').font.size = Pt(30)
  72. # 創(chuàng)建兩行兩列的表格
  73. rows_num = 5
  74. cols_num = 6
  75. table = document.add_table(rows=rows_num, cols=cols_num, style = 'Table Grid')
  76. for r in range(rows_num):
  77. for c in range(cols_num):
  78. table.cell(r, c).text = '第{r}行{c}列'.format(r = r+1, c = c+1)
  79. # 保存文檔
  80. document.save('Python生成的文檔.docx')
  81. if __name__ == '__main__':
  82. main()
  83. 復(fù)制代碼

將源碼保存為單獨的python文件后,安裝python-docx, 找一張圖片,命名為少女17087938.jpg, 將圖片與python文件放到同一個目錄, 然后再python3環(huán)境下運行python文件即可! 最后附測試圖片一張:

最終效果:

自動化修改文檔

實例: 將當前目錄下, 所有docx文件內(nèi)的'海南大學', 替換為'Hainan University', 并將新文件添加前綴new后, 保存到當前目錄下

  1. import docx
  2. import os
  3. import re
  4. # 傳入三個參數(shù), 舊字符串, 新字符串, 文件對象
  5. def replace_text(old_text, new_text, file):
  6. # 遍歷文件對象
  7. for f in file.paragraphs:
  8. # 如果 舊字符串 在 某個段落 中
  9. if old_text in f.text:
  10. print('替換前:', f.text)
  11. # 將段落存入 inline
  12. inline = f.runs
  13. # 遍歷 段落 生成 i
  14. for i in inline:
  15. # 如果 舊字符串 在 i 中
  16. if old_text in i.text:
  17. # 替換 i.text 內(nèi)文本資源
  18. text = i.text.replace(old_text, new_text)
  19. i.text = text
  20. print('替換后===>', f.text)
  21. def main():
  22. # 獲取當前目錄下所有的文件名列表
  23. old_file_names = os.listdir()
  24. # 獲取所有docx文件名列表
  25. docx_file_names = []
  26. for old_file_name in old_file_names:
  27. if re.match(r'^[^~].*\.docx', old_file_name):
  28. print(old_file_name)
  29. docx_file_names.append(old_file_name)
  30. for docx_file_name in docx_file_names:
  31. try:
  32. # 獲取文件對象
  33. file=docx.Document(docx_file_name)
  34. # 三個參數(shù): 舊的字符串, 新的字符串, 文件對象
  35. print('開始替換:', docx_file_name)
  36. replace_text('海南大學', 'Hainan University', file)
  37. file.save('new_'+docx_file_name)
  38. print(docx_file_name, '替換成功')
  39. except:
  40. print(docx_file_name, '替換失敗')
  41. pass
  42. if __name__ == '__main__':
  43. main()
  44. 復(fù)制代碼

關(guān)于Python操控PPT:https://www.jianshu.com/p/5b294515b480

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約