Высота строки таблицы Python Docx

Таким образом, ширина столбца определяется шириной всех ячеек в одном столбце, например:

from docx import Document
from docx.shared import Cm

file = /path/to/file/
doc = Document(file)
table = doc.add_table(4,2)
for cell in table.columns[0].cells:
    cell.width = Cm(1.85)

однако высота строки определяется с помощью строк, но я не могу вспомнить, как я это делал на прошлой неделе.

Теперь мне удалось найти способ ссылаться на строки в таблице, но, похоже, я не могу вернуться к этому способу. Можно изменить высоту с помощью метода add_row, но вы не можете создать таблицу без строк, поэтому верхняя строка всегда будет иметь высоту по умолчанию, которая составляет около 1,6 см.

Есть способ получить доступ к абзацам без использования add_paragraph, знает ли кто-нибудь, как получить доступ к строкам без использования метода add_row, потому что именно его я использовал для установки высоты строки в таблице по умолчанию.

Я пробовал это, но это не работает:

row = table.rows
row.height = Cm(0.7)

но хотя это не дает ошибки, это также не влияет на высоту.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
7 310
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

table.rows - это коллекция, в частности последовательность, поэтому вам нужно обращаться к каждой строке отдельно:

for row in table.rows:
    row.height = Cm(0.7)

Также ознакомьтесь с row.height_rule, чтобы узнать о некоторых связанных действиях, к которым у вас есть доступ:
https://python-docx.readthedocs.io/en/latest/api/table.html#row-objects

Когда вы назначаете table.rows.height, он просто добавляет атрибут экземпляра .height, который ничего не делает. Это один из побочных эффектов динамического языка, такого как Python, - вы сталкиваетесь с подобным загадочным поведением. Это уходит, когда вы набираетесь опыта, по крайней мере, для меня :)

Спасибо, Сканни, так я и поступил в прошлый раз, я все еще изучаю ООП, поэтому иногда сложно определить, что к чему принадлежит.

iFunction 08.11.2018 10:03

Дополнительная информация: Ответ здесь правильный, но это даст минимальную высоту строки. Использование WD_ROW_HEIGHT_RULE.EXACTLY исправит высоту ячейки до установленной высоты строки, игнорируя содержимое ячейки, это может привести к обрезке текста нежелательным образом.

para = table.cell(0,0).add_paragrph('some text')

РЕШЕНИЕ: add_paragraph фактически добавляет пустую строку над текстом. Вместо этого используйте следующее, чтобы избежать использования add_paragraph:

table.cell(0,0).paragraphs[0].text = 'some text'

или использование add_run может упростить работу с текстом:

run = table.cell(0,0).paragraphs[0].add_run('some text') run.bold = True

Другие вопросы по теме