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

Я готовлю некоторые данные и хочу автоматически сгенерировать отчет. Я могу сохранить сюжет, а затем добавить его в свой документ. Однако я предпочитаю делать это напрямую, без сохранения шага. Просматривая документацию по 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')

3 ответа

Решение

Используйте 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

Попробуйте код ниже в 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()

Вы можете использоватьdocxtplи использоватьjinjaшаблоны для размещения диаграмм.

Другие вопросы по тегам