web-dev-qa-db-ja.com

Python-docx、テーブルのセル幅を設定する方法は?

テーブルでセル幅を設定する方法は?

from docx import Document
from docx.shared import Cm, Inches

document = Document()
table = document.add_table(rows=2, cols=2)
table.style = 'TableGrid' #single lines in all cells
table.autofit = False

col = table.columns[0] 
col.width=Inches(0.5)
#col.width=Cm(1.0)
#col.width=360000 #=1cm

document.save('test.docx')

Col.widthで設定した数や単位は関係ありません。幅は変わりません。

13
girdeux

簡単な答え:セル幅を個別に設定します。

for cell in table_columns[0].cells:
    cell.width = Inches(0.5)

python-docxは、列幅を設定するときに指示どおりに実行します。問題は、Wordがそれを無視することです。 LibreOfficeなどの他のクライアントは、列幅の設定を尊重します。

.docxファイルはXML形式です(ファイル拡張子の接尾辞「x」)。テーブルのXMLボキャブラリーには、列幅の場所とセル幅の場所があります。この詳細に関しては、誰が少し面倒なことに注意を払っています。 1つの共通点は、誰もが個々のセルレベルで設定された明示的な幅を尊重することです。私にはあまり意味がありませんが、これが機能するために必要なことです。プログラムで詳細を処理する機能を使用することは理にかなっている場合があります。

def set_col_widths(table):
    widths = (Inches(1), Inches(2), Inches(1.5))
    for row in table.rows:
        for idx, width in enumerate(widths):
            row.cells[idx].width = width

テーブルにセルが結合されている場合、これはもう少し複雑になります。これが実際にWordが列幅を無視する理由です。特定のマージされたセルの状況ではあいまいです。

18
scanny