Как ограничить строки для разделения на следующие страницы в Python Docx - PullRequest
0 голосов
/ 11 июня 2018

Я создал таблицу, используя python-docx.Я пробовал AllowBreakAcrossPages, продолжайте, но они не работают. Я все еще вижу последнюю строку на другой странице и остальную часть таблицы вместе с заголовками на предыдущей странице.

Пожалуйста, найдите код, который я использовал

*#here **index** iterates through all the rows in table*


 `table.rows[**index**].AllowBreakAcrossPages = False`

*#Paragraps is content in each cell*
    paragraphs = cell.paragraphs

    for paragraph in paragraphs:

       for run in paragraph.runs:
         font = run.font
         font.size= Pt(9)
         run.space_after = Pt(0)
         run.space_before = Pt(0)
         *#the following lines are not working*
         run.keep_together = True
         run.keep_with_next = True
         run.widow_control = True

1 Ответ

0 голосов
/ 13 июня 2018

По сути, вы храните отдельные строки на одной странице, между ними Word может свободно разбивать таблицу. Здесь - описание решения в VBA, позвольте мне скопировать ответ на случай, если ссылка когда-нибудь прекратится.(Для таблиц с вертикально объединенными ячейками существует более сложное решение, которое вы можете найти по ссылке.)

Если вам нужно сохранить всю таблицу на одной странице, отформатируйте все абзацы, кромепоследний в каждой строке с атрибутом «держать с помощью следующего».чтобы сделать это, вы можете использовать код, подобный следующему:

Dim Tbl As Table, lRow As Long, Rng As Range
With Tbl
  lRow = .Rows.Count
  Set Rng = ActiveDocument.Range(.Rows(1).Range.Start, .Rows(lRow - 1).Range.End)
  .Rows.AllowBreakAcrossPages = False
  .Rows.First.HeadingFormat = True
  With .Range.ParagraphFormat
    .SpaceBeforeAuto = False
    .SpaceAfterAuto = False
    .WidowControl = True
    .KeepWithNext = False
    .KeepTogether = False
    .PageBreakBefore = False
    .WordWrap = True
  End With
  With Rng.ParagraphFormat
    .KeepWithNext = True
    .KeepTogether = True
  End With
End With
Set Rng = Nothing: Set Tbl = Nothing

Строка '.Rows.First.HeadingFormat = True' гарантирует, что если таблица слишком длинная, чтобы поместиться нана всей странице заголовок появится и на последующих страницах.

...