Добавить графики непосредственно в документ, используя пакет Python DOCX - PullRequest
0 голосов
/ 29 ноября 2018

Я строю некоторые данные и хочу автоматически сгенерировать отчет.Я могу сохранить сюжет, а затем добавить его в свой документ.Однако я предпочитаю делать это напрямую, без сохранения шага.Просматривая документацию по python-docx, я сомневаюсь, что это выполнимо этим пакетом.Есть ли другой способ?

Мой код выглядит так прямо сейчас

from docx import Document
from docx.shared import Inches
import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.savefig('test.png')

document = Document()
document.add_heading('Report',0)
document.add_picture('test.png', width=Inches(1.25))

document.save('report.docx')

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Попробуйте код ниже в Python 3, чтобы напрямую сохранить график в документе.

from docx import Document
from docx.shared import Inches
import matplotlib.pyplot as plt
import numpy as np
from pandas.compat import BytesIO

memfile = BytesIO()
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.savefig(memfile)

document = Document()
document.add_heading('Report',0)
document.add_picture(memfile, width=Inches(1.25))

document.save('report.docx')
memfile.close()
0 голосов
/ 29 ноября 2018

Использовать StringIO:

Этот модуль реализует файловый класс StringIO, который читает и записывает строковый буфер (также известный как файлы памяти).

from docx import Document
from docx.shared import Inches
import matplotlib.pyplot as plt
import numpy as np
from pandas.compat import StringIO

memfile = StringIO()
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.savefig(memfile)

document = Document()
document.add_heading('Report',0)
document.add_picture(memfile, width=Inches(1.25))

document.save('report.docx')
memfile.close()

Python 3: https://docs.python.org/3/library/io.html

Python 2: https://docs.python.org/2/library/stringio.html

Или используйте StringIO из pandas.compat

...