【Python自动化】Python-docx基础入门--插入table表格样式设置

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。



前言

本博客主要介绍插入表格的相关设置,包括字体设置,居中设置,插入图片等。


一、python-docx安装

pip install python-docx

二、常见用法

1.设置样式

document = Document()

#设置word文档中的字体格式
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

2.插入标题和段落

# 段落标题
document.add_heading('Heading, level 1', level=1)
paragraph1 = document.add_paragraph("附表 文件列表及相关属性信息") # 行中插入景号
paragraph1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT  #居左

3.插入图片

document.add_picture('monty-truth.png', width=Inches(1.25)

4.插入表格

records = (
    (3, '101', 'Spam'),
    (7, '422', 'Eggs'),
    (4, '631', 'Spam, spam, eggs, and spam')
)

table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for qty, id, desc in records:
    row_cells = table.add_row().cells
    row_cells[0].text = str(qty)
    row_cells[1].text = id
    row_cells[2].text = desc

5.纵向改横向

最近需要docx页面输出,需要将正常纵向页面转为横向页面,查了一些资料,发现很多都是科普的解释,并没有讲出具体怎么做,现在贴出我实现的代码。

需要引入的:

from docx import Document
from docx.enum.section import WD_ORIENT
纵向转横向的代码:

document = Document()
section = document.sections[0]
new_width, new_height = section.page_height, section.page_width
section.orientation = WD_ORIENT.LANDSCAPE
section.page_width = new_width
section.page_height = new_height

三、创建表格

1.表格居中显示

from docx import Document
from docx.enum.table import WD_TABLE_ALIGNMENT

document = Document()
table = document.add_table(rows=2, cols=2)
# 对表格进行对齐
table.alignment = WD_TABLE_ALIGNMENT.CENTER

document.save('my_table.docx')

2.设置表格列宽

要设置表格的列宽,可以使用 Table 对象的 columns 属性。该属性返回一个列宽列表,可以按索引对其进行更改以设置不同列的宽度。以下是一个示例:
方式一

from docx import Document

document = Document()
table = document.add_table(rows=2, cols=3)

# 设置第一列宽度为1英寸
table.columns[0].width = 914400
# 设置第二列宽度为2英寸
table.columns[1].width = 1828800
# 设置第三列宽度为3英寸
table.columns[2].width = 2743200
document.save('my_table.docx')

方式二

c_list = ['序号','名字',"景号","成像时间","缩略图"]
# 设置列宽
for index,column_name in enumerate(c_list):
    table.columns[index].vertical_alignment = WD_ALIGN_PARAGRAPH.CENTER
    if column_name == "景号":
        table.columns[index].width  = Inches(3.3)
    elif column_name == "成像时间":
        table.columns[index].width  = Inches(0.8)
    elif column_name == "缩略图":
        table.columns[index].width  = Inches(1.1)
    elif column_name == "是否满足合同要求":
        table.columns[index].width  = Inches(0.8)
    else:
        table.columns[index].width  = Inches(0.5)

在这个示例中,我们首先创建了一个包含 2 行和 3 列的表格。然后,我们按索引对列宽列表进行更改,以便将第一列设置为 1 英寸宽、第二列设置为 2 英寸宽,第三列设置为 3 英寸宽。最后,我们将文档保存到文件 ‘my_table.docx’ 中。

3.固定列宽

要固定表格的列宽,你可以使用Table.auto_fit方法,并将autofit参数设置为False。然后,可以使用Table.columns属性来访问表格中的列,并设置每个列的宽度。这里有个例子:

from docx import Document
from docx.shared import Inches

document = Document()
table = document.add_table(rows=2, cols=3, style='Table Grid')

# Turn off autofit  固定列宽
table.autofit = False

# Set column widths
table.columns[0].width = Inches(2.0)
table.columns[1].width = Inches(3.0)
table.columns[2].width = Inches(4.0)

# Add cell content
row = table.rows[0]
row.cells[0].text = 'Column 1'
row.cells[1].text = 'Column 2'
row.cells[2].text = 'Column 3'

document.save('my_table.docx')

在这个例子中,我们首先创建一个2行3列的表格,并将autofit参数设置为False。接着,我们设置每个列的宽度,分别为2、3和4英寸。最后,我们在第一行的每个单元格中添加文本。

注意,在使用Table.columns属性时,索引从0开始。因此,我们使用table.columns[0]来访问第一列,使用table.columns[1]来访问第二列,以此类推。

4.设置表格内容样式(字体)

方式一

# 创建表格
table = document.add_table(rows=1, cols=len(c_list),style ='Table Grid')
#设置整个表格字体属性
table.style.font.bold = True
table.style.font.name=u'宋体'
table.style.font.size= Pt(10)
table.style.font.color.rgb= RGBColor(0, 0, 0)
table.style.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER 

方式二

from docx import Document
from docx.enum.style import WD_STYLE_TYPE

# 创建一个新文档对象
document = Document()

# 定义样式
table_style_name = 'mystyle'
table_style= document.styles.add_style(table_style_name, WD_STYLE_TYPE.TABLE)
table_style.font.bold = True
table_style.font.name=u'宋体'
table_style.font.size= Pt(10)
table_style.font.color.rgb= RGBColor(0, 0, 0)
table_style.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER 

# 创建一个带有三列和四行的表格
# table = document.add_table(rows=4, cols=3,style='mystyle')
table = document.add_table(rows=4, cols=3)

# 设置表格样式
table.style = table_style

5.首行样式(水平居中和垂直居中)

# 首行
hdr_cells = table.rows[0].cells
for i,hdr in enumerate(hdr_cells):
    hdr.text = c_list[i]
    # 设置单元格填充颜色为浅灰色
	hdr.fill.solid()
	hdr.fill.fore_color.rgb = (220, 220, 220)
	# 设置单元格文本格式为粗体
	hdr.paragraphs[0].runs[0].bold = True
	# 垂直居中+水平居中
	hdr.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
	hdr.vertical_alignment = WD_ALIGN_PARAGRAPH.CENTER

6.单元格中插入图片

要在表格中插入图片,你可以使用add_picture方法插入图片,并指定插入到哪个单元格中。这里有个例子:

from docx import Document
from docx.shared import Inches

document = Document()
table = document.add_table(rows=2, cols=2)

# Add image to cell (0, 1)
cell = table.cell(0, 1)
img_path = 'picture.png'
paragraph = cell.paragraphs[0]
run = paragraph.add_run()
run.add_picture(img_path, width=Inches(2.0))

document.save('my_table.docx')

在这个例子中,我们首先创建一个2行2列的表格,在第1行第2列插入一张名为“picture.png”的图片。我们首先获取该单元格的段落,然后在段落中添加一个run对象,然后调用add_picture方法将图片插入到run对象中。

注意,我们在调用add_picture方法时使用了width=Inches(2.0),以确保图片的宽度为2英寸。你可以根据需要调整宽度。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
python-docx库中,可以通过Table对象来创建和操作表格。在创建表格时,可以指定表格样式Table对象提供了一些属性和方法来操作表格样式,主要包括以下几种: 1. alignment属性:用于设置表格的对齐方式。可选值有LEFT、CENTER和RIGHT。 2. autofit属性:用于设置表格是否自动调整列宽以适应内容。可选值为True或False。 3. style属性:用于设置表格的样式名称。可以使用已经定义好的样式,如"Table Grid"、"Table Grid Light"等。 4. add_row()方法:用于向表格添加新的一行。 5. cell()方法:用于获取指定位置的单元格对象。 下面是一个示例代码,演示如何创建一个具有特定样式和内容的表格: ```python from docx import Document from docx.enum.table import WD_ALIGN_VERTICAL # 创建文档对象 doc = Document() # 创建带有样式的表格 table = doc.add_table(rows=3, cols=4, style="Table Grid") table.alignment = "CENTER" # 设置表头 heading_cells = table.rows[0].cells heading_cells[0].text = "姓名" heading_cells[1].text = "年龄" heading_cells[2].text = "性别" heading_cells[3].text = "职业" # 添加数据行 data = [ ["张三", "25", "男", "工程师"], ["李四", "30", "女", "设计师"], ["王五", "35", "男", "销售员"] ] for row in data: new_row = table.add_row().cells new_row[0].text = row[0] new_row[1].text = row[1] new_row[2].text = row[2] new_row[3].text = row[3] # 设置单元格对齐方式 for row in table.rows: for cell in row.cells: cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER # 保存文档 doc.save("table.docx") ``` 以上代码中,通过add_table()方法创建一个3行4列样式为"Table Grid"的表格。然后使用rows和cells属性来设置表头和数据行。通过vertical_alignment属性来设置单元格的垂直对齐方式。最后使用save()方法保存文档。 以上是python-docx库中的一些表格样式的操作方法,可以根据需求灵活运用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我辈李想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值