Вопрос:
Это мой первый вопрос о SO и хотел бы поблагодарить вас за любую помощь. Я новичок в python, python-docx и программировании в целом. Я работаю над программой GUI (используя PyQt) для создания контракта в формате docx. У меня больше всего работает, но вот проблема, которую я испытываю. Мне нужно выровнять текст как влево, так и вправо в той же строке. Словом, я считаю, что это делается путем перехода на правый отступ и попадание на вкладку, а затем добавления текста. Однако я не могу понять, как это сделать в python-docx. Я пытался:
paragraph = document.add_paragraph() paragraph.add_run(‘SOME TEXT’) paragraph.alignment = 0 paragraph.add_run(‘SOME OTHER TEXT’) paragraph.alignment = 2
но это не сработало. Я пробовал некоторые другие идеи в документации, такие как перечисление WD_PARAGRAPH_ALIGNMENT, но ничего не получилось.
Можно ли это сделать в python-docx (im с использованием версии 0.8.5)?
Спасибо за любую помощь!
Лучший ответ:
Не уверен, что вы все еще ищете решение, но…
Я также создаю контракты с python-docx и столкнулся с этой проблемой. Пока не будет добавлена функция выравнивания по правому краю, моим обходным путем является форматирование строки в виде таблицы с использованием пользовательского стиля таблицы.
- Сначала откройте документ (“custom_styles.docx”) и добавьте таблицу с 1 строкой и 2 столбцами.
- Выберите таблицу и добавьте новый стиль таблицы (“CustomTable”), где первый столбец выровнен по левому краю, а последний столбец выровнен по правому краю. (Я также сделал границы невидимыми, установив их в “none” или окрасив их в белый цвет.)
- Удалите таблицу и сохраните документ, который даст вам пустой документ с новым стилем “CustomTable”.
Следующее должно работать для создания строки, которая выглядит как выровненной по левому краю, так и выровненной по правому краю:
from docx import Document document = Document(‘custom_styles.docx’) table = document.add_table(1, 2, style=’CustomTable’) table.cell(0,0).text = ‘Left Text’ table.cell(0,1).text = ‘Right Text’ document.save(‘new_document_name.docx’)
Самое сложное для меня было выяснить, как создать стиль таблицы в Word.
Ответ №1
Если то, что вы ищете, это абзац, который полностью оправдан, что означает, что он выравнивается с полями как на левой, так и на правой стороне, что выполняется с помощью свойства Paragraph.alignment:
from docx.enum.text import WD_ALIGN_PARAGRAPH paragraph = document.add_paragraph(‘A paragraph of text ..’) paragraph.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
Если вы хотите установить выравнивание по правому краю, которое еще не поддерживается в python-docx. Вы можете добавить запрос функции в список проблем GitHub: https://github.com/python-openxml/python-docx/issues
Хорошим названием проблемы будет “feature: tab stops”.