Python docx template 库 循环提取excel数据时,每次渲染后可以保存出来一个文件,无法直接在循环后生成到一个word文件内

python在进行excel到word邮件合并,循环提取时,无法直接生成在一个word文档内。
 from docxtpl import DocxTemplate,InlineImage
from docx.shared import Cm
from mailmerge import MailMerge #邮件合并
import jinja2
import xlrd #excel读取
def Covert_Excel_To_Word():
    # 打开Excel文件
    workbook = xlrd.open_workbook(r"统计表.xls")
    sheet = workbook.sheet_by_index(0)
    nrow = sheet.nrows #获取excel最大行数
    word_path = "信息卡.docx"
    contexts = []
    # 打开指定Word模板
    for i in range(2,nrow):
        word = DocxTemplate("信息卡.docx")
        picture = InlineImage(word,'E:/venv/Lib/a.jpg',width=Cm(3))
        context = {'序号': sheet.cell_value(i, 0),
                   '病害体编号': sheet.cell_value(i, 1),
                   '道路名称': sheet.cell_value(i, 2),
                   '详细位置描述': sheet.cell_value(i, 3),
                   '中心坐标_X': sheet.cell_value(i, 4),
                   '中心坐标_Y': sheet.cell_value(i, 5),
                   '隐患类型': sheet.cell_value(i, 6),
                   '隐患长度': sheet.cell_value(i, 7),
                   '隐患宽度': sheet.cell_value(i, 8),
                   '隐患深度': sheet.cell_value(i, 10),
                   '隐患等级': sheet.cell_value(i, 12),
                   '成因分析': sheet.cell_value(i, 13),
                   '处置建议': sheet.cell_value(i, 14),
                   '地图位置示意': picture
        }

        jinja_env = jinja2.Environment(autoescape=True)
        word.render(context,jinja_env)
       # word.save('ceshi'+str(sheet.cell(i, 0).value)+'.docx'
        contexts.append(context)

    with MailMerge(word_path) as doc:
        doc.merge_templates(contexts, separator='page_break')
        output = r'E:\venv\Lib\测试.docx'
        doc.write(output)

if __name__ == '__main__':
    Covert_Excel_To_Word()


###### Traceback (most recent call last):
  File "E:\venv\Lib\word插图测试1.py", line 44, in <module>
    Covert_Excel_To_Word()
  File "E:\venv\Lib\word插图测试1.py", line 39, in Covert_Excel_To_Word
    doc.merge_templates(contexts, separator='page_break')
  File "D:\python\lib\site-packages\mailmerge.py", line 234, in merge_templates
    self.merge(parts, **repl)
  File "D:\python\lib\site-packages\mailmerge.py", line 254, in merge
    self.__merge_field(part, field, replacement)
  File "D:\python\lib\site-packages\mailmerge.py", line 266, in __merge_field
    text_parts = text.replace('\r', '').split('\n')
AttributeError: 'float' object has no attribute 'replace'


Traceback (most recent call last):
  File "E:\venv\Lib\word插图测试1.py", line 44, in <module>
    Covert_Excel_To_Word()
  File "E:\venv\Lib\word插图测试1.py", line 39, in Covert_Excel_To_Word
    doc.merge_templates(contexts, separator='page_break')
  File "D:\python\lib\site-packages\mailmerge.py", line 234, in merge_templates
    self.merge(parts, **repl)
  File "D:\python\lib\site-packages\mailmerge.py", line 254, in merge
    self.__merge_field(part, field, replacement)
  File "D:\python\lib\site-packages\mailmerge.py", line 266, in __merge_field
    text_parts = text.replace('\r', '').split('\n')
AttributeError: 'float' object has no attribute 'replace'

能直接循环提取完后,保存在一个文档内吗

看错误提示 , 应该是是需要字符型,但参数是 浮点型

img

这样检查一下, 看生成的数据有没有这种情况,如果有,在生成数据的对应位置, 加个 str ,转成字符型。

不能都加吧 , 看看数据,分别处理吧
最后那行 picture 就不能加吧。