Запись таблиц из Word (.docx) в Excel (.xlsx) с помощью xlsxwriter - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь разобрать слово (.docx) для таблиц, а затем скопировать эти таблицы в Excel с помощью xlsxwriter. Это мой код:

from docx.api import Document
import xlsxwriter

document = Document('/Users/xxx/Documents/xxx/Clauses Sample - Copy v1 - for merge.docx')
tables = document.tables

wb = xlsxwriter.Workbook('C:/Users/xxx/Documents/xxx/test clause retrieval.xlsx')
Sheet1 = wb.add_worksheet("Compliance")
index_row = 0

print(len(tables))

for table in document.tables:
data = []
keys = None
for i, row in enumerate(table.rows):
    text = (cell.text for cell in row.cells)

    if i == 0:
        keys = tuple(text)
        continue
    row_data = dict(zip(keys, text))
    data.append(row_data)
    #print (data)
    #big_data.append(data)
    Sheet1.write(index_row,0, str(row_data))      
    index_row = index_row + 1

print(row_data)

wb.close()

Это мой желаемый результат:

enter image description here

Однако вот мой фактический результат:

enter image description here

Я знаю, что мой текущий вывод вместо этого производит список строк.

Могу ли я получить желаемый результат? используя xlsxwriter? Любая помощь приветствуется

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Это часть моего обновления кода, которая позволила мне получить желаемый результат:

for row in block.rows:
        for x, cell in enumerate(row.cells):
            print(cell.text)
            Sheet1.write(index_row, x, cell.text)
        index_row += 1

Результат :

Output

1 голос
/ 27 мая 2020

Я бы использовал go, используя pandas пакет вместо xlsxwriter, как показано ниже:

from docx.api import Document
import pandas as pd

document = Document("D:/tmp/test.docx")
tables = document.tables
df = pd.DataFrame()

for table in document.tables:
    for row in table.rows:
        text = [cell.text for cell in row.cells]
        df = df.append([text], ignore_index=True)

df.columns = ["Column1", "Column2"]    
df.to_excel("D:/tmp/test.xlsx")
print df

Что выводит следующее, вставленное в excel:

>>> 
  Column1 Column2
0   Hello    TEST
1     Est    Ting
2      Gg      ff
...