我想使用 python 编辑 odt 文档。只是简单的关键字交换。这可能吗?

I would like to edit an odt document using python. Just a simple swap of keywords. Is this possible?

提问人:Cameron Stark 提问时间:4/19/2022 最后编辑:Cameron Stark 更新时间:5/1/2022 访问量:901

问:

1)我想以编程方式交换 odf 文档中的某些关键字。例如,示例租约已TENANT_NAME,我的程序将插入租户的实际名称。

  1. 我尝试了这个网站上的一个代码片段,它适用于简单的文档,但是当我尝试在我的租约中使用它时,它会抛出超出范围的索引错误。
from odf import opendocument, text, teletype

this_dictionary = {
    'TENANT_NAME': 'Cameron Stark',
    'DATE_START': '5/1/2022',
    'DATE_END': '7/31/2022',
    'RENT_AMOUNT': '500',
    'DEPOSIT_AMOUNT': '400',
    'EMAIL_ADDRESS': '[email protected]',
    'PHONE_NUMBER': '1234567890'
}

PATH = "C:/Users/Cameron Stark/Documents/sample_lease_alpine.odt"
DESTINATION = "C:/Users/Cameron Stark/Documents/cameron_lease.odt"


def change_odt_file(my_dictionary, path, destination):
    text_doc = opendocument.load(path)
    for x, y in my_dictionary.items():
        texts = text_doc.getElementsByType(text.P)
        s = len(texts)
        for i in range(s):
            old_text = teletype.extractText(texts[i])
            new_text = old_text.replace(x, y)
            new_S = text.P()
            new_S.setAttribute("stylename", texts[i].getAttribute("stylename"))
            new_S.addText(new_text)
            texts[i].parentNode.insertBefore(new_S, texts[i])
            texts[i].parentNode.removeChild(texts[i])
        text_doc.save(destination)
        text_doc = opendocument.load(destination)


change_odt_file(this_dictionary, PATH, DESTINATION)
蟒蛇 ODT ODF

评论

0赞 ewokx 4/19/2022
在不知道您的文档到底是什么样的的情况下,我只能提供一个建议,即使用不同的参数名称,而不是您是否打印出了什么和之后?dictxyfor x, y in dict.items():
0赞 Robert 5/1/2022
你通常不会因为困难的问题而被否决,但对于那些表明你没有努力解决问题的问题,或者对于不清楚和缺少细节的问题,纯粹的代码转储,或者如果你听起来过于咄咄逼人,或者因为模糊的问题描述。就您而言,清楚地描述错误发生的位置会有所帮助。还包括 odt 文件,以获得最小的可重现示例

答:

0赞 Cameron Stark 5/1/2022 #1

简单的解决方案,只需用 HTML 重写我的租约即可。超级易于使用,比任何文字处理软件都具有更强大的功能。