10 利用python-docx批量处理Word文件—表格样式

表格样式可以分为两种:一要表格的自身的样式,比如边框,对齐方式、背景等,别一种是表格中文字的样式。

本文的内容包括:

    表格样式
         表格的对齐方式:居中、居左、居右
         表格的亮度和高度
         表格边框
   

    表格内容的样式
        字体、字号
        文字的对齐方式
        文字颜色

 

一次性引入下面会用到的库:

from docx.enum.style import WD_STYLE_TYPE
from docx import Document
from docx.shared import Cm,Pt,RGBColor
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.table import WD_ALIGN_VERTICAL
from docx.enum.text import WD_ALIGN_PARAGRAPH

1.表格样式
    1.1 利用docx已经定义好的样式
          docx定义了大量的样式库,可以直接使用,一般都能满足需求,使用方法如下:

          方法1: 创建表格时设置

                 d=Document()
                 d.add_table(2,3,style='style_name')

         方法2: 表格创建完成后再设置

                 table.style='style_name'

         关于style_name请看python-docx表格样式列表
     

         也可以用以下代码输出所有style的名称:

             d=Document()
             styles=d.styles
             for s in styles:
                   if s.type==WD_STYLE_TYPE.TABLE:
                         print(s.name)

             d.save('style.docx')

   1.2 自定义表格样式
        1.2.1 表格宽度
             (1)table.autofit=True可以使表格自动适应窗口大小。

             (2)table.cell(row,col).width=Cm(4)

                可以设置每个单元格的宽,同列单元格宽度相同,如果定义了不同的宽度将以最大值准。
                宽度的单位也可以是Pt或Inches
             (3)table.columns[0].width=Cm(2)

                API中有这样的方法,但是实验发现不能生效,感兴趣的可以研究。
        1.2.2表格高度
            (1)table.rows[0].height=Cm(12)

                宽度不能用的方法高度却可以用,单位同样可以是Pt或Inches
            (2)table.cell(row,col).height=Cm(4)

                API有定义,但是不生效,刚好和宽度相反。
            (3)这里还看到另一种方式,不过我并没有看懂,感兴趣的可以研究。

         1.2.3 表格对齐方式
                table.alignment=WD_TABLE_ALIGNMENT.CENTER|WD_TABLE_ALIGNMENT.LEFT|WD_TABLE_ALIGNMENT.RIGHT

         1.2.4表格边框的宽度和颜色
               目录还没有找到可行方法

 2.表格内容样式
     2.1文字的对齐方式
        (1)水平对齐方式
              table.cell(r,c).paragraphs[0].paragraph_format.alignment=WD_ALIGN_PARAGRAPH.CENTER

              WD_ALIGN_PARAGRAPH.LEFT|WD_ALIGN_PARAGRAPH.RIGHT
        (2)垂直对齐方式
               table.cell(r,c).vertical_alignment = WD_ALIGN_VERTICAL.CENTER

              WD_ALIGN_VERTICAL.TOP|WD_ALIGN_VERTICAL.BOTTOM      
              这里我就想吐槽一下,垂直方向的居中应该middle
     2.2 字体、字号 和颜色
          方法1:

                run=tb.cell(r,c).paragraphs[0].add_run(text)
                run.font.name='宋体'
                run.font.size=Pt(18)
                run.font.color.rgb=RGBColor(233,123,12)
                这种方法适用于给单元格赋值的同时修改字体样式
               实验发现,字体的设置只对英文及数据生效,对汉字不生效
          方法2:

                table.style.font.size=Pt(18)
                table.style.font.name='黑体'
                table.style.font.color.rgb=RGBColor(231,212,123)
               这种方法可以修改整个表格的字体属性
               字体的设置同样对汉字不生效

posted on 2020-02-27 16:05  神密探索  阅读(678)  评论(0)    收藏  举报

导航