#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», чтобы она всегда начиналась с новой строки.