python-docx,指定表格区域替换文本
输入
python-docx,从数据库查询数据,
SQL如下:SELECT contract_amount,interest_rate FROM acc_cus.cus_loan_contract clc WHERE project_no = 'BUWS10043190001' limit 11,
查询到的数据代替E:\hhj\202304\图片excel\自动化样例模板_原始.docx文档表格5第4行开始的第2、3列,
字体设置为楷体,居中对齐
输出
import pymysql
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
# 连接数据库
connection = pymysql.connect(host='localhost', user='root', password='password', db='database_name', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
# 执行SQL查询语句
with connection.cursor() as cursor:
sql = "SELECT contract_amount,interest_rate FROM acc_cus.cus_loan_contract clc WHERE project_no = 'BUWS10043190001' limit 11"
cursor.execute(sql)
results = cursor.fetchall()
# 关闭数据库连接
connection.close()
# 读取docx文档
doc = Document('E:\\hhj\\202304\\图片excel\\自动化样例模板_原始.docx')
# 定位表格5
table = doc.tables[4]
# 设置表格样式
table.style = 'Table Grid'
# 遍历表格并替换数据
for i, row in enumerate(table.rows[3:]):
if i < len(results):
# 获取查询结果中的数据
contract_amount = str(results[i]['contract_amount'])
interest_rate = str(results[i]['interest_rate'])
# 设置字体和居中对齐
for cell in row.cells[1:3]:
cell.paragraphs[0].style.font.name = '楷体'
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 替换表格中的数据
row.cells[1].text = contract_amount
row.cells[2].text = interest_rate
# 保存修改后的docx文档
doc.save('E:\\hhj\\202304\\图片excel\\自动化样例模板_修改.docx')
请注意,上述代码中的数据库连接和文件路径需要根据实际情况进行修改。另外,代码中也设置了表格样式和字体,如需根据具体需求进行修改或调整,请自行进行修改。
**注释解释如下: **
-
import pymysql :导入Python操作MySQL数据库的模块pymysql。
-
from docx import Document :导入Python操作docx文件的模块docx,用于读取和保存docx文档。
-
from docx.enum.text import WD_ALIGN_PARAGRAPH :导入docx模块中的枚举变量,用于设置文本对齐方式。
-
connection = pymysql.connect(host='localhost', user='root', password='password', db='database_name', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) :创建数据库连接,其中包括主机地址、用户名、密码、数据库名称、字符集和游标类型设置等信息。
-
with connection.cursor() as cursor: :创建游标并执行SQL语句。
-
sql = "SELECT contract_amount,interest_rate FROM acc_cus.cus_loan_contract clc WHERE project_no = 'BUWS10043190001' limit 11" :编写SQL查询语句,查询符合条件的前11条数据。
-
cursor.execute(sql) :执行SQL语句。
-
results = cursor.fetchall() :获取查询结果。
-
connection.close() :关闭数据库连接。
-
doc = Document('E:\hhj\202304\图片excel\自动化样例模板_原始.docx') :读取docx文档,将其加载到内存中。
-
table = doc.tables[4] :获取表格5的对象。
-
table.style = 'Table Grid' :设置表格样式为“网格型”。
-
使用for循环遍历表格中从第4行开始的每一行数据。
-
contract_amount = str(results[i]['contract_amount']) :获取查询结果中的贷款金额,并将其转换为字符串类型。
-
interest_rate = str(results[i]['interest_rate']) :获取查询结果中的利率,并将其转换为字符串类型。
-
cell.paragraphs[0].style.font.name = '楷体' :设置该单元格中字体为楷体。
-
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER :设置该单元格中文本对齐方式为居中对齐。
-
row.cells[1].text = contract_amount :替换第2列中的数据。
-
row.cells[2].text = interest_rate :替换第3列中的数据。
-
doc.save('E:\hhj\202304\图片excel\自动化样例模板_修改.docx') :保存修改后的docx文档。
enumerate(table.rows[3:]):表示从表格(table)的第四行开始,枚举表格中的所有行并进行相应的操作。