Импорт таблицы, созданной в python, в docx - PullRequest
0 голосов
/ 16 мая 2019

Я создал таблицу на python, но не могу импортировать эту таблицу в docx. Что мне делать?

import docx 
import pandas as pd 
doc = docx.Document('Demo.docx')   

raw_data = {"Density" : [147.7, 148.6, 149.3, 153.3, 147.3, 147.8, 149.4, 147.8, 151.1, 148.5 ],
            "% Compaction":[95.4, 96.0, 95.3, 98.6, 95.1, 95.5, 96.4, 95.5, 97.5, 95.9],
            "Pass/Fail":["Pass","Pass","Pass","Pass","Pass","Pass","Pass","Pass","Pass","Pass",]} 
df = pd.DataFrame(raw_data, columns= ['Density','% Compaction','Pass/Fail']) 
print(df)

docx.tables = df 
doc.save("Demo.docx")

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Объект document поддерживает метод add_table, который создает заполнитель таблицы в документе.

Ваш оператор присваивания неверен, вы перезаписываете пакет (docx.tables).Даже если учесть эту опечатку, doc.tables - это таблица collection , так что вы переписываете это с помощью pandas DataFrame!

Вам нужно использовать метод doc.add_table для создания таблицыи затем заполните его ячейки значениями из вашего фрейма данных.

Нет конструктора для Table объекта.Он просто добавляется в документ с помощью метода add_table.

Не проверено, но что-то вроде этого:

table = doc.add_table(rows=1, cols=len(df.columns))
hdr_cells = table.rows[0].cells
for i,cl in enumerate(hdr_cells):
    hdr_cells[i].text = df.columns[i]

for row in df.index:
    values = df.loc[row]
    row_cells = table.add_row().cells
    for i,v in enumerate(values):
        row_cells[i].text = v
0 голосов
/ 16 мая 2019

Предполагая, что вы хотите записать данные в файл csv, а не в docx (почему документ MS Word ...?)

Мое решение этой проблемы - использовать Dataframe от pandas, как вы, но с небольшими изменениями:

import pandas as pd

raw_data = {"Density" : [147.7, 148.6, 149.3, 153.3, 147.3, 147.8, 149.4, 147.8, 151.1, 148.5 ], "% Compaction":[95.4, 96.0, 95.3, 98.6, 95.1, 95.5, 96.4, 95.5, 97.5, 95.9], "Pass/Fail":["Pass","Pass","Pass","Pass","Pass","Pass","Pass","Pass","Pass","Pass",]}
csv_file = "test_data.csv" #name of the file
df=pd.DataFrame(raw_data) #using pandas' Dataframe
df.to_csv(csv_file, index = False) #dumping data with headers, but without indexing 

Надеюсь, это поможет! :)

...