Как вы можете переместить текст в конец строки в файле docx с помощью python-docx?

#python #docx #python-docx

Вопрос:

У меня есть сообщение типа

 "word1 word2"
 

и хотите изменить его на

"word1_______________word2" (подчеркивания-это пробелы)

Добавление достаточного количества пробелов для сохранения word1 и word2 в одной строке в файле docx.

Боюсь, у меня на самом деле нет хорошего представления о решении этой проблемы. Каждый символ в MS Word занимает разное количество места. Поэтому, к сожалению, я не могу просто использовать len(string) и добавлять достаточно пробелов, чтобы приблизиться к целочисленному значению строки.

Мои word1 и word2 экземпляры имеют переменную длину, но пробел в каждой строке файла docx фиксирован.

Заранее благодарим вас за любые предложения!

Комментарии:

1. Один из способов-создать таблицу, в которой каждая ячейка выровнена по левому/правому краю. Добавление пробелов (потенциально) требует решения целого ряда проблем в будущем.

2. Да, использование пробелов для выравнивания-плохая идея. Вы рассматривали возможность использования вкладок?

Ответ №1:

Если вы хотите заменить последовательность слов в документе Word другой последовательностью, вы можете повторить текст в каждой последовательности экземпляров выполнения в каждом абзаце и заменить исходную последовательность целевой последовательностью. Это предполагает, что два слова имеют одинаковое форматирование, поэтому будут частью одного и того же экземпляра выполнения; т. Е. Если одно слово выделено ЖИРНЫМ шрифтом, а другое-нет, то эта последовательность текста будет разделена на два разных экземпляра выполнения.

 from docx import Document

source = 'word1 word2'
# if wanted to add 12 spaces between the 2 words
target = source.replace(' ', ' ' * 12)
print(f"Replace source: '{source}' with '{target}'")

doc = Document(f)

for p in doc.paragraphs:
    for r in p.runs:
        r.text = r.text.replace(source, target)

doc.save('newdoc.docx')
 

Добавить «ровно столько пробелов», чтобы сохранить word1 их word2 в одной строке, сложно, не видя образца. Если есть текст, предшествующий последовательности «слово 1 слово 2», то выравнивание основано на положении word1 относительно его положения в абзаце в дополнение к типу и размеру шрифта для этого экземпляра запуска. Вы можете добавить новую строку перед любой последовательностью «слово 1 слово 2», чтобы она всегда начиналась с новой строки.