python-docx,指定表格区域替换文本

发布时间 2023-04-28 10:34:22作者: 捷后愚生

输入

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')

请注意,上述代码中的数据库连接和文件路径需要根据实际情况进行修改。另外,代码中也设置了表格样式和字体,如需根据具体需求进行修改或调整,请自行进行修改。

**注释解释如下: **

  1. import pymysql :导入Python操作MySQL数据库的模块pymysql。

  2. from docx import Document :导入Python操作docx文件的模块docx,用于读取和保存docx文档。

  3. from docx.enum.text import WD_ALIGN_PARAGRAPH :导入docx模块中的枚举变量,用于设置文本对齐方式。

  4. connection = pymysql.connect(host='localhost', user='root', password='password', db='database_name', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) :创建数据库连接,其中包括主机地址、用户名、密码、数据库名称、字符集和游标类型设置等信息。

  5. with connection.cursor() as cursor: :创建游标并执行SQL语句。

  6. sql = "SELECT contract_amount,interest_rate FROM acc_cus.cus_loan_contract clc WHERE project_no = 'BUWS10043190001' limit 11" :编写SQL查询语句,查询符合条件的前11条数据。

  7. cursor.execute(sql) :执行SQL语句。

  8. results = cursor.fetchall() :获取查询结果。

  9. connection.close() :关闭数据库连接。

  10. doc = Document('E:\hhj\202304\图片excel\自动化样例模板_原始.docx') :读取docx文档,将其加载到内存中。

  11. table = doc.tables[4] :获取表格5的对象。

  12. table.style = 'Table Grid' :设置表格样式为“网格型”。

  13. 使用for循环遍历表格中从第4行开始的每一行数据。

  14. contract_amount = str(results[i]['contract_amount']) :获取查询结果中的贷款金额,并将其转换为字符串类型。

  15. interest_rate = str(results[i]['interest_rate']) :获取查询结果中的利率,并将其转换为字符串类型。

  16. cell.paragraphs[0].style.font.name = '楷体' :设置该单元格中字体为楷体。

  17. cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER :设置该单元格中文本对齐方式为居中对齐。

  18. row.cells[1].text = contract_amount :替换第2列中的数据。

  19. row.cells[2].text = interest_rate :替换第3列中的数据。

  20. doc.save('E:\hhj\202304\图片excel\自动化样例模板_修改.docx') :保存修改后的docx文档。

enumerate(table.rows[3:]):表示从表格(table)的第四行开始,枚举表格中的所有行并进行相应的操作。