python可以做表格文档吗_使用表格—— 使用Python读写Office文档之三

本文介绍使用Python在Word中创建一个表格,以及读取表格中的数据。

============================================================================================================================================================================================================================================================

1.创建表格

在python-docx中有表格对象(Table)。一个Word文档中,有两种表格:一个和段落『同级』的所谓『顶级表格』,我们可以利用Document类的add_table方法创建一个新的顶级表格对象,也可以利用Document类的tables得到文档中所有的顶级表格。另外一种表格是表格里嵌套的表格。我们主要讨论顶级表格。以下叙述中『表格』均指顶级表格。

我们可以把一个表格看成M行(Row)N列(Column)的矩阵。利用Table类的Cell对象的text属性,可以设置、获取表格中任一单元格的文本。

下面举一个例子说明。为了演示表格,首先得弄一些数据。这里使用psutil这个库获取一些计算机的内存、CPU以及磁盘信息作为原始数据。第一个例子是展示当前电脑内存的使用情况,我们首先把从psutil得到的内存信息转化为一个dict,它的key是项目(物理内存总数、使用数、剩余数等),value是各个项目的数值。

from docx import Document

import psutil

#准备一些数据

vmem = psutil.virtual_memory()

vmem_dict = vmem._asdict()

trow = 2

tcol = len(vmem_dict.keys())

#产生表格

document = Document()

table = document.add_table(rows=trow,cols=tcol,style = 'Table Grid')

for col,info in enumerate(vmem_dict.keys()):

table.cell(0,col).text = info

if info == 'percent':

table.cell(1,col).text = str(vmem_dict[info])+'%'

else:

table.cell(1,col).text = str(vmem_dict[info]/(1024*1024)) + 'M'

document.save('table.docx')

运行后得到:

2. Row,Column和Cell 对象

虽然Cell对象最常用,但还是先介绍Row和Column对象。它们在遍历表格的时候很有用。

Table对象有两个属性rows和columns,这两个对象的返回值实际上是对象Rows和Columns,但是,Rows和Columns这两个对象,可以等同于Row的列表以及Column的列表。因此迭代、求长度等对list的操作同样适用于Rows和Columns。

for obj_row in table.columns:

#obj_row是Row对象的一个实例

利用Table对象的add_row方法和add_column方法可以动态的增加表格尺度。add_row在表格下方创建新列并返回新行的Row对象,add_column在表格右侧创建新列并返回新行的Column对象。

创建好表格后,就可以利用以下五种方法得到Cell对象:使用Table对象的cell(row,col)方法。左上角的坐标为0,0;

使用Table对象的row_cells(row_index)方法得到一个list,它包含了某一行的按列排序的所有Cell

得到一个Row对象后,使用Row.cells属性得到该Row的按列排序的所有Cell

使用Table对象的column_cells(column_index)方法得到一个list,它包含了某一列的按行排序的所有Cell

得到一个Column对象后,使用Column.cells属性得到该Column的按行排序的所有Cell

如果想遍历所有Cell,可以先遍历所有行(table.rows),再遍历每一行所有的Cell; 也可以先遍历所有列(table.columns),再遍历每一列所有的Cell。

一个Cell对象最常用的属性是text。设置这个属性可以设定单元格的内容,读取这个属性可以获取单元格的内容。

Cell对象还有add_paragraph、add_table方法,利用这些方法可以形成复杂的表格——多个段落,以及嵌套的表格等。

可以利用Cell对象的merge(other_cell)方法合并单元格。合并的方式为,以当前Cell为左上角,other_cell为右下角进行合并。下面举一个例子。首先创建一个表格,然后合并其中的单元格并保存为Word文档。然后,读取这个Word文档,并把每个Cell的坐标标注到Cell里。

from docx import Document

document = Document()

table = document.add_table(rows=9,cols=10,style = 'Table Grid')

cell_1 = table.cell(1,2)

cell_2 = table.cell(4,6)

cell_1.merge(cell_2)

document.save('table-1.docx')

document = Document('table-1.docx')

table = document.tables[0]

for row,obj_row in enumerate(table.rows):

for col,cell in enumerate(obj_row.cells):

cell.text = cell.text + "%d,%d" % (row,col)

document.save('table-2.docx')

不难看到,在单元格合并后,可以利用合并区域的任何一个单元格的坐标指代这个合并区域。换句话说,单元格合并并没有使Cell『消失』,而是这些Cell共享相同的内容而已。

3. 调整宽度

行以及单元格的高度受字体限制,不能够手动的调整高度。但是,列Column以及Cell的宽度可以手动调整。

from docx import Document

from docx.shared import Inches

document = Document()

for row in range(9):

t = document.add_table(rows=1,cols=1,style = 'Table Grid')

t.autofit = False #很重要!

w = float(row) / 2.0

t.columns[0].width = Inches(w)

document.save('table-step.docx')

4. 设置表格的设计样式

表格的设计样式是在Word中表格设计面板中列举的各种样式。

可以通过Document.add_table的第三个参数设定表格样式,也可以用table的style属性获取和设置样式。如果设置样式,可以直接用样式的英文名称,例如『Table Grid』;如果对样式进行了读取,那么会得到一个Style对象。这个对象是可以跨文档使用的。除此之外,也可以使用Style.name方法得到它的名称。

python-docx使用独立于Office的样式命名体系。随着Office的更新,python-docx内建的样式名称和较新版本的Office样式名称可能会不一致。可以用下面的代码得到python-docx内部的表格样式名称:

from docx import Document

from docx.enum.style import WD_STYLE_TYPE

document = Document()

styles = document.styles

table_styles = [s for s in styles if s.type == WD_STYLE_TYPE.TABLE]

for style in table_styles:

print(style.name)

将第一个例子里的

table = document.add_table(rows=trow,cols=tcol,style = 'Table Grid')

改为

table = document.add_table(rows=trow,cols=tcol,style = 'Colorful Grid Accent 4')

就能够得到漂亮的表格了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值