python docx操作ValueError: can only parse strings

        用python对Word的操作使用,一般也就是我们需要往Word的固定位置,写入固定的数据。直接写入纯文档,或者向设定好的表格中写入参数(日志,报告等),图像加载三大类。Word的格式设置我们可以直接在模板Word中设置好,在这里主要介绍数据写入、表格数据写入、图像数据写入。

        在python调用Word的时候出现一个错误:ValueError: can only parse strings。在我遇到的情况中发现,其实是因为对Word进行了相关的格式设置导致的,比如:水印、页眉等,更多出错的情况就没有测试了,遇到相同问题的小伙伴自己从最简单的Word开始测试一下找出相应的哪些不能在Word模板中出现删除掉就行。

        大部分功能的实现我们只需要掌握一个函数的使用就行,

        document=DocxTemplate('model.docx')

        document.render(context)

        document.save('model_out.docx')

        context中就是对应的数据写入格式了。

        1.文本写入使用:

        {{test_year}}年{{test_month}}月{{test_day}}

        在模板表格中创建一个Word写入年月日并保存,在python通过一下代码实现:

from docxtpl import DocxTemplate
import datetime

string_time=datetime.datetime.now().strftime('%Y%m%d')
pre_day = string_time[6:8]
pre_month = string_time[4:6]
pre_year = string_time[0:4]
context = {
    'test_year' : pre_year,
    'test_month':pre_month,
    'test_day':pre_day,}
document=DocxTemplate('model.docx')
document.render(context)
document.save('model_out.docx')

        2.表格内容的实现,在本文中的内容编辑

        表格内容的实现,在python中的对应语言编辑,其他内容不变,就context改变一下就行。这个表格的第一个单元格被合并了,如果不想合并的话test_item对应的删除就行,要添加多例对应的添加就行,多行的添加可以通过for循环数组来实现。

    context={
        'items' : [{'standard_value' : '0', 'actual_value' : '0', 'precision' : '0' },
                   {'standard_value' : '0', 'actual_value' : '0', 'precision' : '0' },
                   {'standard_value' : '0', 'actual_value' : '0', 'precision' : '0' },],
        'test_item' : 'name',
    }

        3.图像信息替换,document.replace_pic('original.png','replace.png')。第一个参数是原图的文件位置,第二个是替换图像的文件位置,要替换成功模板中必须加载有对应的原图图像,运行后用最新的图像信息替换原图信息就行。

        总结:如果涉及到多个context想要分开编写的话,可以通过context.update(new_context)更新字典的方法来进行变量数据添加。本文更多的是设计文本内容替换,内容格式等其他相关信息的配置需要的模板文件中完成。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值