Возврат Каретки Python Docx
Python Docx
- довольно хорошая библиотека для создания документов Microsoft Word для чего-то, что не имеет прямого отношения ко всем материалам COM. Тем не менее, я сталкиваюсь с некоторыми ограничениями.
- кто-нибудь знает, как можно поместить возврат каретки в строку текста?
Я хочу абзаца в несколько строк, без дополнительного пространства между ними. Тем не менее, написание строки, которая разделяет строки с обычным n
не работает. Не используя 

или 
. Любые другие мысли, или эта структура слишком ограничена для чего-то подобного?
3 ответов
Я не уверен, что это возможно. Похоже, что Word фактически рассматривает нажатия клавиши enter (я рассматриваю это действие как своего рода программный эквивалент "\r\n" и "\n") как создание нового абзаца.
если я записываю макрос в Word, который состоит из:
- ввод текста "One"
- нажатие клавиши enter
я получаю VBA:
Selection.TypeText Text:="One"
Selection.TypeParagraph
если я создам Документ Word, который выглядит так (нажатие enter после каждого слова):
One
Two
Three
тело этого документа выглядит следующим образом в :
<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()))
Edit:
глядя на это еще немного, если вы нажмете Shift + Enter в Word, он добавит ручной разрыв строки (а не абзац) через добавление Chr(11)
. В Open XML это переводится как перерыв.
смотреть на!--9--> файл Python Docx, что-то вроде этого может быть путь (отказ от ответственности: не проверено):
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)
вы можете добиться возврата каретки с помощью python-docx, вызвав add_break()
на вашем счете. Например:
doc = Document()
p = doc.add_paragraph()
run = p.add_run()
run.add_break()
по состоянию на v0.7.2, python-docx переводит символы "\n " и "\r " в строке в <w:br/>
элементы, которые обеспечивают поведение, которое вы описываете. Он также переводит символы "\t " в <w:tab/>
элементы.
это поведение доступно для строк, предоставленных:
Document.add_paragraph()
Paragraph.add_run()
и для строк назначено:
Paragraph.text
Run.text