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

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


文章目录


前言

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


一、python-docx安装

pip install python-docx

二、常见用法

1.设置样式

python 复制代码
document = Document()

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

2.插入标题和段落

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

3.插入图片

python 复制代码
document.add_picture('monty-truth.png', width=Inches(1.25)

4.插入表格

python 复制代码
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页面输出,需要将正常纵向页面转为横向页面,查了一些资料,发现很多都是科普的解释,并没有讲出具体怎么做,现在贴出我实现的代码。

需要引入的:

python 复制代码
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.表格居中显示

python 复制代码
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 属性。该属性返回一个列宽列表,可以按索引对其进行更改以设置不同列的宽度。以下是一个示例:

方式一

python 复制代码
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')

方式二

python 复制代码
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属性来访问表格中的列,并设置每个列的宽度。这里有个例子:

python 复制代码
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.设置表格内容样式(字体)

方式一

python 复制代码
# 创建表格
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 

方式二

python 复制代码
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.首行样式(水平居中和垂直居中)

python 复制代码
# 首行
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方法插入图片,并指定插入到哪个单元格中。这里有个例子:

python 复制代码
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英寸。你可以根据需要调整宽度。

相关推荐
无敌最俊朗@1 小时前
unity3d————接口基础知识点
开发语言·c#
winfredzhang1 小时前
如何使用 python 中的 Pillow 创建可自定义的图标生成器
python·pillow·图标·png
qq_273900231 小时前
pytorch detach方法介绍
人工智能·pytorch·python
虞书欣的62 小时前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
金蝶软件小李2 小时前
C#界面设计
计算机视觉·c#
FHYAAAX2 小时前
【机器学习】任务十:从函数分析到机器学习应用与BP神经网络
开发语言·python
PyAIGCMaster2 小时前
python环境中,敏感数据的存储与读取问题解决方案
服务器·前端·python
何曾参静谧2 小时前
「Py」模块篇 之 PyAutoGUI库自动化图形用户界面库
运维·python·自动化
pumpkin845143 小时前
客户端发送http请求进行流量控制
python·网络协议·http
smj2302_796826523 小时前
用枚举算法解决LeetCode第3348题最小可整除数位乘积II
python·算法·leetcode