Разбор таблицы из docx с использованием Python - PullRequest
0 голосов
/ 13 сентября 2018

Сохранить формат таблицы при чтении и записи из существующего документа в новый документ

Вот код, который я пытаюсь использовать для приведенной ниже таблицы, которая находится внутри моего demo.docx enter image description here

but I am not getting the output in same format Need help to fix this so that I can copy this table in the same format to my new docx
ITEM
NEEDED
Books
1
Pens
3
Pencils
2
Highlighter
2 colors
Scissors
1 pair

Код, который я использую, приведен ниже ..

  import docx
  doc = docx.Document('demo.docx')
  doc = docx.Document('demo.docx')
  for table in doc.tables:
    for row in table.rows:
       for cell in row.cells:
          for para in cell.paragraphs:
             print para.text

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

1 Ответ

0 голосов
/ 12 января 2019

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

Исходя из того, что я собираю, файлы документов (* .docx, * .doc, * .txt) читаются как строки, поэтому мы должны обрабатывать данные как строки. Это означает, что вам нужно знать количество столбцов и строк таблицы.

Если исходный файл документа называется «Stationery.docx», это может помочь.

import docx
import pandas as pd
import numpy as np

doc = docx.Document("Stationery.docx")

df = pd.DataFrame()

tables = doc.tables[0]

##Getting the original data from the document to a list
ls =[]
for row in tables.rows:
    for cell in row.cells:
        for paragraph in cell.paragraphs:
            ls.append(paragraph.text)



def Doctable(ls, row, column):
    df = pd.DataFrame(np.array(ls).reshape(row,column))  #reshape to the table shape
    new = docx.Document()
    word_table =new.add_table(rows = row, cols = column)
    for x in range(0,row,1):
        for y in range(0,column,1):
            cell = word_table.cell(x,y)
            cell.text = df.iloc[x,y]


    return new, df
...