Python-docx 读写 Word 文档:插入图片、表格,设置表格样式,章节,页眉页脚等

    技术2022-07-11  130

    Python-docx 模块读写 Word 文档基础(二):图片、表格,表格样式,章节设置,页眉页脚等

    前言:1、插入图片、设置大小:2、插入表格、设置格式:3、设置章节、页面设置等:4、设置页眉页脚结尾: 【Python与Office】专栏

    前言:

    上一篇博客介绍了 python-docx 模块如何 创建 word 文档、设置段落格式、字体格式等 ,本篇博客将对在日常使用 word 文档的其他操作进行介绍。

    主要内容有:

    1、插入图片、设置图片大小; 2、插入表格、设置表格样式、字体样式; 3、章节设置:页面大小、边距等; 4、设置页眉页脚。

    1、插入图片、设置大小:

    上篇博客简单的介绍了插入图片的方法,但是没介绍图片大小的设置方法:

    # 导入模块 from docx import Document # 此模块中包含 docx 中各类单位方法 from docx import shared doc = Document() doc.add_heading('python-docx 基础讲解(二)') # 在文档中增加图片,并对设置图片大小 # 当只设置一个方向的长度(宽或高)时,另一方向会自动缩放 doc.add_picture('1.png',width=shared.Inches(1)) # 按英寸设置 doc.add_picture('1.png',height=shared.Cm(2)) # 按厘米设置 # 保存文件 doc.save('test2.docx')

    注:当只设置图片一个方向的尺寸(宽或高)时,另一方向会自动缩放。

    以上设置后文档截图:

    2、插入表格、设置格式:

    1、在文档中增加表格,并添加文字:

    # 在文档中增加表格,并添加文字 table1 = doc.add_table(2,3) # 添加一个2行3列的表格,表格样式为None "add_table(self, rows, cols, style=None):" table1.cell(0,0).text = '0' # 给表格单元格赋值 # 获取表格对象所有单元格对象列表 print(table1._cells) # ------运行结果------ # [<docx.table._Cell object at 0x000002131AF996C8>, # <docx.table._Cell object at 0x000002131AF99608>, # <docx.table._Cell object at 0x000002131AF99648>, # <docx.table._Cell object at 0x000002131AF99688>, # <docx.table._Cell object at 0x000002131AF99588>, # <docx.table._Cell object at 0x000002131AF995C8>] # ------运行结果------ # 对单元格对象设置文字 for i,cell in enumerate(table1._cells): cell.text = str(i)

    注:在word文档中增加表格时,会返回一个 table 对象。table对象中包含单元格 cell 对象,单元格写入数据就是设置 cell 对象的 text 值。

    插入的表格截图:

    2、设置表格样式:

    从增加表格方法:add_table(self, rows, cols, style=None),可以看出在创建表格时,就可以对表格样式进行设置。

    可通过下面的方法获取 word 文档中 默认的表格样式:

    # 获取所有表格样式 from docx.enum.style import WD_STYLE_TYPE styles = doc.styles for style in styles: if style.type == WD_STYLE_TYPE.TABLE: print(style) ''' 可设置的表格样式: _TableStyle('Normal Table') id: 187730312 _TableStyle('Table Grid') id: 187730312 _TableStyle('Light Shading') id: 187730376 _TableStyle('Light Shading Accent 1') id: 187730312 _TableStyle('Light Shading Accent 2') id: 187730376 _TableStyle('Light Shading Accent 3') id: 187730312 _TableStyle('Light Shading Accent 4') id: 187730376 _TableStyle('Light Shading Accent 5') id: 187730312 _TableStyle('Light Shading Accent 6') id: 187730376 _TableStyle('Light List') id: 187730312 ... 内容很多,可以自己尝试运行打印一下 '''

    以上获取的表格样式,对应word文档里的这些表格样式:

    英文也不复杂,大家可以对照一下。

    设置表格样式:

    表格在创建时可及可指定格式:

    doc.add_table(2,3,style ='Table Grid' )

    也可在创建后进行设置:

    # 为表格设置统一样式: table1.style = 'Table Grid'

    设置表格样式后表格截图:

    这样就比较接近日常使用的表格了。

    3、其他表格常用方法:

    # 表格设置自动调整列宽,(默认也为真) table1.autofit = True # 为表格对象增加列 table1.add_column(shared.Inches(3)) # 需指定宽度 "add_column(self, width):" # 为表格对象增加行 table1.add_row() # 只能逐行添加 "add_row(self):"

    获取表格对象的一些属性:

    # 获取行对象 row0 = table1.rows[0] print(row0) # 获取列对象 col0 = table1.columns[0] # 获取表格一行的单元格对象列表 row0_cells = table1.row_cells(0) print(row0_cells) # 运行结果 # [<docx.table._Cell object at 0x000000000B311C88>, # <docx.table._Cell object at 0x000000000B311AC8>, # <docx.table._Cell object at 0x000000000B311B08>, # <docx.table._Cell object at 0x000000000B311A48>] # 获取一列的单元格对象列表 col_0_cells = table1.column_cells(0) print(col_0_cells) # 运行结果 # [<docx.table._Cell object at 0x000000000B312F88>, # <docx.table._Cell object at 0x000000000B312CC8>, # <docx.table._Cell object at 0x000000000B31A108>]

    4、设置表格内单元格对齐方式,合并单元格:

    # 设置单元格对齐方式 # 垂直对齐方式 from docx.enum.table import WD_ALIGN_VERTICAL table1.cell(0,0).vertical_alignment = WD_ALIGN_VERTICAL.TOP # 合并单元格 cell_new = table1.cell(2,0).merge(table1.cell(2,1)) # 返回一个新单元格对象 print(cell_new) # <docx.table._Cell object at 0x000000000B312F08> # 要继续合并的话,可用此单元格再次使用 merge 方法

    对表格增加行、列,合并单元格后表格截图:

    5、设置单元格字体格式:

    单元格内其实也是有 paragraph 对象的,即对单元格内字体设置方式,和对段落中文字格式设置方法一样。

    cell_par = cell_new.paragraphs[0] # 获取到对象 # 设置对齐方式 from docx.enum.text import WD_ALIGN_PARAGRAPH cell_par.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # 获取 run 对象 cell_run = cell_new.paragraphs[0].runs[0] # 设置字体 cell_run.font.name = 'Times New Roman' from docx.oxml.ns import qn cell_run.font.element.rPr.rFonts.set(qn('w:eastAsia'),'楷体') # 设置字体颜色 from docx.shared import RGBColor cell_run.font.color.rgb = RGBColor(255,55,55) # 红色

    表格截图:

    3、设置章节、页面设置等:

    章节 也是 word 文档中一个块级元素,相较于段落块级元素它的范围应该更大一点。一般来说:一个 word 文档包含多个章节、一个章节包含多个 run 块级元素。

    一个word文档被建立时至少包含一个章节:

    # word文档中章节 section 对象 sec = doc.sections print(sec) # <docx.section.Sections object at 0x000000000B312E88> print(len(sec)) # 1

    1、新建章节:

    # 新建一个章节 doc.add_section() print(len(sec)) # 2

    2、获取文档页面边距:

    word 文档的页边距、页眉页脚的设置和章节对象有关:

    # 文档页边距设置 # 获取、设置页面边距 sec0 = sec[0] # 获取章节对象 # 获取页面边距值:(单位为像素) print('左边距:',sec0.left_margin) # 左边距: 1143000 print('右边距:',sec0.right_margin) # 右边距: 1143000 print('上边距:',sec0.top_margin) # 上边距: 914400 print('下边距:',sec0.bottom_margin) # 下边距: 914400 print('页眉边距:',sec0.header_distance) # 页眉边距: 457200 print('页脚边距:',sec0.footer_distance) # 页脚边距: 457200

    3、设置文档页面边距、页面大小:

    # 设置页面高度、宽度 sec0.page_height = shared.Inches(15) sec0.page_width = shared.Inches(10) # 也可以设置页面的边距: sec0.left_margin = shared.Inches(1) sec0.right_margin = shared.Inches(1) sec0.top_margin = shared.Inches(2) sec0.bottom_margin = shared.Inches(2)

    设置后的 word 文档截图:

    4、设置页眉页脚

    设置页面页脚时,先获取页眉页脚对象:

    # 设置页眉 head0 = sec0.header # 返回页眉对象 font0 = sec0.footer # 返回页脚对象 print(head0) # <docx.section._Header object at 0x000000000B312E08> print(font0) # <docx.section._Footer object at 0x000000000B312B88>

    设置方法:

    "在设置word文档的页眉页脚时,有一个非常重要的是否与前一节相同" # 查看页眉是否和上节一直 print(head0.is_linked_to_previous) # 默认为 True # 设置页眉 "页眉也是一个块级对象,里面也包含了 Paragraph 对象," "所以对齐方式,文字格式设置方式和前文介绍一致。" print(head0.paragraphs) head0_par = head0.paragraphs[0] head0_par.add_run('页眉') # 设置页脚 font0_par = font0.paragraphs[0] font0_par.add_run('页脚') # 注: 设置页脚按序列增加的方式暂未找到

    页眉页脚设置效果图:

    结尾:

    以上就是本篇博客的全部内容,感谢阅读。

    下一篇将会是 python-docx 模块读取 word 文档中各种信息方法的详细介绍,包括段落文本信息、表格文本信息、各类块级元素的格式信息等。

    【Python与Office】专栏

    该专栏会对 Python 的第三方模块,如:xlwt,xlrd,python-docx等,操作 Office 办公软件(Word Excel PPT)的方法进行详细讲解。同时也会搭配一些实例演练,一方面强化知识点的理解与运用,另一方面也希望能起到,引导读者进行思考:如何用 python 提高 offic 办公软件办公效率的作用。

    感兴趣的朋友,可以点个 关注 或 收藏 。如在博客中遇到任何问题或有一些想法、需求,可留言或私信。

    创作不易,你的支持是我最大的动力,感谢 !

    Processed: 0.008, SQL: 9