При расшифровке файла .docx в новый документ .docx, как вставить и связанные данные на основе абзацев? - PullRequest
0 голосов
/ 21 марта 2020
for src_paragraph in src_doc.paragraphs:
                src_paragraph_format = src_paragraph.paragraph_format
                # print(src_paragraph.text)

                # Handle Headers/Footers                                        Headers not implemented
                # 
                sections = trgt_doc.sections                                    # there's only 1 section
                section = sections[0]
                footer = section.footer                                         # get the footer section of the section
                paragraph = footer.paragraphs[0]                                # footer has 1 paragraph
                paragraph.text = f'{page_number} \t\t\t {printed_time_stamp}'   

                # Transcribe paragraph settings - Build the target
                #
                trgt_paragraph = trgt_doc.add_paragraph(style = src_paragraph.style ) 

                if src_paragraph._p.pPr.numPr is not None:
                    print('\n <w:pStyle> :', src_paragraph._p.pPr.pStyle)
                    print ('<w:numPr> :', src_paragraph._p.pPr.numPr)
                    print ('\t<w:ilvl> :', src_paragraph._p.pPr.numPr.ilvl)
                    print ('\t<w:numId> :', src_paragraph._p.pPr.numPr.numId)
                    print('\n', src_paragraph.text)

                trgt_paragraph_format = trgt_paragraph.paragraph_format
                trgt_paragraph.style.name = src_paragraph.style.name
                trgt_paragraph_format.left_indent = src_paragraph_format.left_indent  # inherited from style hierarchy
                trgt_paragraph_format.right_indent = src_paragraph_format.right_indent 
                # print('S_INDENT -------|', src_paragraph_format.left_indent)
                # print('T_INDENT -------|', trgt_paragraph_format.left_indent)
                trgt_paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
                trgt_paragraph_format.widow_control = True
                font = trgt_paragraph.style.font
                font.name = 'Times'
                font.size = Pt(11)

Я переписываю файлы Word в похожие документы с той же информацией. содержание, но с изменениями и дополнениями. Я создаю целевые файлы, перебирая исходные абзацы, затем создавая целевой абзац / прогоны.

Это в основном сделано, но за исключением захвата цифр c маркеров. Я могу захватить и , но пока не знаю, как получить эти значения в каждом целевом абзаце.

Это мой первый проект с данными .docx, и я исследую это как I go.

1 Ответ

0 голосов
/ 25 марта 2020

При попытке просто вставить в целевой файл .docx, который я генерирую, я попробовал этот подход https://python.developreference.com/article/15889882/How+to+add+line+numbers+to+a+docx+document+section+using+python-docx

https: // stackoverflow.com/questions/ 38400208 / how-to-add-number-numbers-to-docx-document-section-using- python -docx

# Generate new Target file from Source File
for src_paragraph in src_doc.paragraphs:
    src_paragraph_format = src_paragraph.paragraph_format
    # Get Target section(s)
    sections = trgt_doc.sections
    section = sections[0]
    sectPr = section._sectPr
    lnNumType = OxmlElement('w:lnNumType')
    lnNumType.set('fooAttrib', '42')
    sectPr.append(lnNumType)
    print('STUBB')

Здесь указаны номера строк, а не стиль контура список нумерации. Я просто хотел сделать начальную вставку, чтобы увидеть, как она будет работать; Это не так.

# Add Numbered List to Target paragraphs.
# Isolate the number bulleted paragraphs 
if src_paragraph._p.pPr.numPr:
   # SOURCE XML Paragraphs containing numPr
   print('--------------------------------------------')
   print('TEXT_SRC', src_paragraph.text,'\n')
   print('SRC ParXML \n', src_paragraph._p.xml)
   print('--------------------------------------------')     

Я могу найти десятичные числа в источнике .docx таким образом; хитрость в том, чтобы просто передать это цели, которую я генерирую.

...