Задать вопрос
@EVGenyK_ch

Как скопировать списки(маркированые нумерованые) docx python?

Всем привет, у меня была такая задача используя python-docx разделять документ на множество документов по определенным критериям, с этой задачей справился но заметил что после разделения в новых документах не отображаются списки, например в оригинале -
1. пункт 1
2. пункт 2
3. пункт 3
а в разделенном документе получаю -
пункт 1
пункт 2
пункт 3
Прогуглил все возможные решения и не могу найти информации, переделывать на aspose.words не вариант, хотелось бы решить методами python-docx

Пытался копировать стили построчно, не получилось -
def copy_paragraph(paragraph, new_doc):
    new_para = new_doc.add_paragraph()

    # Копируем формат списка, если это нумерованный или маркированный список
    if paragraph.style.name in ['List Number', 'List Bullet']:
        new_para.style = paragraph.style
    
    for run in paragraph.runs:
        new_run = new_para.add_run(run.text)
        new_run.bold = run.bold
        new_run.italic = run.italic
        new_run.underline = run.underline
        new_run.font.color.rgb = run.font.color.rgb
        new_run.font.size = run.font.size

такой вариант тоже результатов не дал -
def copy_paragraph(paragraph, new_doc):
    new_para = new_doc.add_paragraph()

    # Копируем текст, форматирование и атрибуты
    for run in paragraph.runs:
        new_run = new_para.add_run(run.text)
        new_run.bold = run.bold
        new_run.italic = run.italic
        new_run.underline = run.underline
        new_run.font.color.rgb = run.font.color.rgb
        new_run.font.size = run.font.size

    # Если параграф является списком (нумерованным или маркированным), копируем атрибуты списка
    numPr = paragraph._element.find(qn('w:numPr'))
    if numPr is not None:
        # Копируем элемент w:numPr
        new_numPr = OxmlElement('w:numPr')

        # Копируем дочерние элементы (например, w:ilvl и w:numId)
        for child in numPr:
            new_child = OxmlElement(child.tag)
            for attr in child.attrib:
                new_child.set(attr, child.attrib[attr])
            new_numPr.append(new_child)

        # Вставляем numPr в новый параграф
        new_para._element.insert(0, new_numPr)

надеюсь найдутся знатоки которые знают как списки копировать
  • Вопрос задан
  • 93 просмотра
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы