Python docx スタイルを維持しながら段落内の文字列を置き換える 質問する

Python docx スタイルを維持しながら段落内の文字列を置き換える 質問する

文書全体の書式を維持しながら、Word 文書内の文字列を置き換える方法についてサポートが必要です。

私は python-docx を使用していますが、ドキュメントを読んだところ、段落全体で機能するため、太字や斜体の単語などの書式設定が失われます。置換するテキストを含めると太字になり、そのままにしておきたいと思います。次のコードを使用しています:

from docx import Document
def replace_string2(filename):
    doc = Document(filename)
    for p in doc.paragraphs:
        if 'Text to find and replace' in p.text:
            print 'SEARCH FOUND!!'
            text = p.text.replace('Text to find and replace', 'new text')
            style = p.style
            p.text = text
            p.style = style
    # doc.save(filename)
    doc.save('test.docx')
    return 1

したがって、これを実装して次のようなものが必要な場合(置換される文字列を含む段落の書式設定が失われます):

これは段落1、これは大胆な

これは段落2、そして私は古いテキスト

現在の結果は次のとおりです。

これは段落1、これは大胆な

これは第2段落です。新しいテキストに置き換えます。

ベストアンサー1

私はこの質問を投稿しました (ここには同様の質問がいくつかありましたが)。なぜなら、それらのどれも (私の知る限り) 問題を解決しなかったからです。oodocx ライブラリを使用するものがありましたが、試してみましたがうまくいきませんでした。そこで、回避策を見つけました。

コードは非常に似ていますが、ロジックは次のとおりです。置換したい文字列を含む段落を見つけたら、次のループを追加します。走る(これは、置換する文字列が同じフォーマットである場合にのみ機能します)。

def replace_string(filename):
    doc = Document(filename)
    for p in doc.paragraphs:
        if 'old text' in p.text:
            inline = p.runs
            # Loop added to work with runs (strings with same style)
            for i in range(len(inline)):
                if 'old text' in inline[i].text:
                    text = inline[i].text.replace('old text', 'new text')
                    inline[i].text = text
            print p.text

    doc.save('dest1.docx')
    return 1

おすすめ記事