Как скопировать абзацы (с числовым форматированием) и изображения из слов (.docx) и вставить в Excel (.xlsx), используя Python - PullRequest
0 голосов
/ 22 марта 2020

У меня есть пункты договора в формате Слова (.docx), которые необходимо часто копировать и вставлять в Excel (.xlsx) для отправки третьей стороне. Предложения часто обновляются, поэтому всегда есть необходимость скопировать и вставить эти пункты поверх. Мне нужно только скопировать и вставить все абзацы и изображения после страницы содержимого. Вот пример документа Clause .

. Я попытался создать код, использующий Python для достижения этого результата. Вот код, который я сделал до сих пор:

!pip install python-docx
import docx
import xlsxwriter

document = docx.Document("Clauses Sample.docx")
wb = xlsxwriter.Workbook('C:/xxxx/xxxxxx/xxxx/clauses sample.xlsx')

docText = []
index_row = 0
Sheet1 = wb.add_worksheet("Sheetttt")

for paragraph in document.paragraphs:
    if paragraph.text:
        docText.append(paragraph.text)
        xx = '\n'.join(docText)

        Sheet1.write(index_row,0, xx)

        index_row = index_row+1

wb.close()        
#print(xx) 

Однако мой вывод в файл Excel выглядит следующим образом:

enter image description here

Но я хочу, чтобы вывод в Excel выглядел примерно так, например: enter image description here enter image description here

Есть ли способ получить желаемый вывод

1 Ответ

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

Вот две проблемы (и решения), которые, я думаю, помогут вам приблизиться.

  1. Ваша переменная docText накапливает весь текст из документа. Я думаю, что вы имели в виду написать один абзац в каждой строке таблицы. Я бы изменил for l oop, чтобы он выглядел так:
for paragraph in document.paragraphs:
    if paragraph.text:
        # Put paragraph.text into the row, NOT docText.
        # Do you really need the join()?  I don't think so.
        Sheet1.write(index_row,0, paragraph.text)

        index_row = index_row+1
Вы отбрасываете пустые абзацы с помощью теста if paragraph.text:. Если вы хотите пустые строки (показанные как строки 4 и 15 в вашем примере электронной таблицы), возьмите этот if тест.
...