使用python包docx将图直接添加到文档中

时间:2018-11-29 09:59:08

标签: python matplotlib docx 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')

2 个答案:

答案 0 :(得分:2)

使用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

或使用pandas.compat中的StringIO

答案 1 :(得分:0)

尝试以下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()