小编Cru*_*ugh的帖子

如何使用python-docx将复选框表单插入.docx文件?

我一直在使用python实现自定义解析器,并使用该解析数据来格式化要在内部分发的word文档。到目前为止,所有格式都非常简单明了,但是我完全对如何在单个表格单元格中插入复选框感到困惑。

我尝试在python-docx中使用python对象函数(使用get_or_add_tcPr()等),这会导致MS Word在尝试打开文件时引发以下错误:“文件xxxx无法打开,因为内容存在问题详细信息:文件已损坏,无法打开”。

经过一段时间的努力,我转向了第二种方法,该方法涉及为输出文档操作word / document.xml文件。我已经检索出我认为是另存为复选框的正确xml,replacementXML并将填充文本插入到单元格中,以用作可以搜索和替换的标签searchXML。以下内容似乎在Linux(Fedora 25)环境中使用python运行,但是当我尝试打开文档时,单词文档显示相同的错误,但是这次文档是可恢复的,并恢复为填充文本。我已经能够将其与手工制作的文档一起使用,并使用一个空的表格单元格,因此我相信这应该是可能的。注意:我在表格单元格中包含了整个xml元素searchXML变量,但我尝试使用正则表达式并缩短字符串。我不仅仅使用精确匹配,因为我知道这可能会因单元而异。

searchXML = r'<w:tc><w:tcPr><w:tcW w:type="dxa" w:w="4320"/><w:gridSpan w:val="2"/></w:tcPr><w:p><w:pPr><w:jc w:val="right"/></w:pPr><w:r><w:rPr><w:sz w:val="16"/></w:rPr><w:t>IN_CHECKB</w:t></w:r></w:p></w:tc>'

def addCheckboxes(): 
    os.system("mkdir unzipped")
    os.system("unzip tempdoc.docx -d unzipped/")

    with open('unzipped/word/document.xml', encoding="ISO-8859-1") as file:
        filedata = file.read()

    rep_count = 0
    while re.search(searchXML, filedata):
        filedata = replaceXML(filedata, rep_count)
        rep_count += 1

    with open('unzipped/word/document.xml', 'w') as file:
        file.write(filedata)

    os.system("zip -r ../buildcfg/tempdoc.docx unzipped/*")
    os.system("rm -rf unzipped")

def replaceXML(filedata, rep_count):
    replacementXML = r'<w:tc><w:tcPr><w:tcW w:w="4320" w:type="dxa"/><w:gridSpan w:val="2"/></w:tcPr><w:p w:rsidR="00D2569D" w:rsidRDefault="00FD6FDF"><w:pPr><w:jc w:val="right"/></w:pPr><w:r><w:rPr><w:sz w:val="16"/>
                       </w:rPr><w:fldChar w:fldCharType="begin"><w:ffData><w:name …
Run Code Online (Sandbox Code Playgroud)

python xml checkbox python-docx

1
推荐指数
1
解决办法
1106
查看次数

标签 统计

checkbox ×1

python ×1

python-docx ×1

xml ×1