9

Python Docxは、すべての COM を直接処理しないもののために Microsoft Word ドキュメントを生成するための非常に優れたライブラリです。それにもかかわらず、私はいくつかの制限に直面しています。

  • テキストの文字列に改行を入れる方法を知っている人はいますか?

段落間に余分なスペースを入れずに複数の行を含める必要があります。ただし、通常の行を区切る文字列を書き出すと機能し\nません。&#10またはも使用していません&#13。他の考えはありますか、それともこのフレームワークはそのようなものにはあまりにも限られていますか?

4

3 に答える 3

8

これが可能かどうかはわかりません。実際、Word はエンター キーの押下を新しい段落の作成として処理しているように見えます (私はこのアクションを "\r\n" および "\n" と同等のプログラムとして扱っています)。


次のもので構成される Word でマクロを記録するとします。

  1. テキスト「One」を入力する
  2. エンターキーを押す

次の VBA を取得します。

Selection.TypeText Text:="One"
Selection.TypeParagraph

次のような Word 文書を作成した場合 (各単語の後に Enter キーを押します):

One

Two

Three

そのドキュメントの本文は、documents.xmlファイル内で次のようになります。

<w:body>
    <w:p w:rsidR="00BE37B0" w:rsidRDefault="00CF2350">
        <w:r>
            <w:t>One</w:t>
        </w:r>
    </w:p>
    <w:p w:rsidR="00CF2350" w:rsidRDefault="00CF2350">
        <w:r>
            <w:t>Two</w:t>
        </w:r>
    </w:p>
    <w:p w:rsidR="00CF2350" w:rsidRDefault="00CF2350">
        <w:r>
            <w:t>Three</w:t>
        </w:r>
    </w:p>
    <w:sectPr w:rsidR="00CF2350" w:rsidSect="001077CC">
        <w:pgSz w:w="11906" w:h="16838"/>
        <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="708" w:footer="708" w:gutter="0"/>
        <w:cols w:space="708"/>
        <w:docGrid w:linePitch="360"/>
    </w:sectPr>
</w:body>

MSDNから、<w:p>要素が段落を表していることがわかります。


これに対する解決策は、 Python Docxの例に従うことだと思います:

body.append(paragraph("Hi."))
body.append(paragraph("My name is Alice."))
body.append(paragraph("Let's code"))

または:

for paragraph_text in "Hi. \nMy name is Alice.\n Let's code".split("\n"):
    body.append(paragraph(paragraph_text.strip()))

編集:

これをさらに調べて、Word で Shift + Enter を押すと、手動で改行 (段落ではない) が追加されChr(11)ます。Open XML では、これはBreakに変換されます。

Python Docxのファイルを見るとdocx.py、次のような方法が考えられます (免責事項: テストされていません)。

for text in "Hi. \nMy name is Alice.\n Let's code".split("\n"):
    run = makeelement('r')
    run.append(makeelement('t', tagtext=text))
    run.append(makeelement('br'))
    body.append(run)
于 2013-01-20T06:59:28.203 に答える
0

v0.7.2 の時点で、python-docx は文字列内の '\n' および '\r' 文字を<w:br/>要素に変換し、説明した動作を提供します。また、'\t' 文字を<w:tab/>要素に変換します。

この動作は、次の目的で提供される文字列で使用できます。

  • Document.add_paragraph()
  • Paragraph.add_run()

および割り当てられた文字列の場合:

  • Paragraph.text
  • Run.text
于 2014-07-20T22:29:58.253 に答える