0

1 つの行と 2 つの列 (つまり、2 つのセル) を含む 1 つのテーブルを含む単純な Word 文書があります。最初のセルの背景色は赤で、もう 1 つのセルは黒です。python-docx を使用して両方を白に変更したい。

いくつかのアプローチを試しましたが、最も有望と思われるアプローチを以下に示します。基になる xml を変更します。

import docx
from docx.oxml.ns import nsdecls
from docx.oxml import parse_xml

# Set a cell background (shading) color to RGB D9D9D9. 
shading_elm = parse_xml(r'<w:shd {} w:fill="FFFFFF"/>'.format(nsdecls('w')))

doc = docx.Document('assets/tabletest.docx')
table = doc.tables[0]

cell = table.cell(0,0)
testchild = cell._tc.getchildren()[0]
testchild.append(shading_elm)

doc.save('assets/tabletest2.docx')

上記のコードは、最初のセルを白に変更し、2 番目のセルを黒のままにします。の前に以下のコードを追加して、2 番目のセルを変更しようとしていますdoc.save

cell2 = table.cell(0,1)
testchild2 = cell2._tc.getchildren()[0]
testchild2.append(shading_elm)

問題は、最初のセルがまだ赤で、2 番目のセルが白になっていることです。最後のセルのみを変更しているようです。

私は間違いなく何かが欠けていますが、私は xml の専門家ではありません。誰にもアイデアはありますか?

4

1 に答える 1

0

最善の策は、実際の XML を調べて、何を変更しようとしているのかを確認することです。OpenXML スキーマは非常に複雑であり、Word は編集中に予想外のあらゆることを行います。_tc.getchildren()[0]子として最初にあるものを取得するだけで、それが無条件にtcPr要素を受け入れる準備ができている要素であるかどうかはわかりません<w:shd>。また、そこに既にw:shd要素がある場合は、新しい要素を追加するのではなく、更新する必要があります。

opc-diag を使用して、作業中の .docx パッケージの document.xml 部分を参照することをお勧めします。ドキュメントから他のコンテンツを削除すると、目的のビットを見つけやすくなります。

そこにある XML を投稿していただければ、何をすべきかを解決するお手伝いができます。

于 2015-06-30T00:23:21.663 に答える