我正在将OpenPyXL构建到一个应用程序中,该应用程序需要一个包含excel文件内容的字符串,以便通过文件流进行写入。
从我对OpenPyXL源代码的调查来看,它看起来不像是支持这种输出。有没有人有修改openpyxl的经验来支持这个?
或任何一般性建议/解决方法?
感谢。
答案 0 :(得分:35)
jcollado的答案实际上是有效的,但是在openpyxl.writer.excel中还有一个名为“save_virtual_workbook”的函数(遗憾的是还没有记录),它将获取工作簿并将工作簿作为字符串返回:
from openpyxl.workbook import Workbook
from openpyxl.writer.excel import save_virtual_workbook
wb = Workbook()
print save_virtual_workbook(wb)
您正在寻找的是save_virtual_workbook()
返回的字符串答案 1 :(得分:15)
如何使用StringIO
对象保存文件内容:
from openpyxl.workbook import Workbook
from StringIO import StringIO
output = StringIO()
wb = Workbook()
wb.save(output)
print output.getvalue()
您要查找的字符串是本示例最后一行中打印的内容。
答案 2 :(得分:2)
从2.6版开始,不推荐使用与save_virtual_workbook
兼容的实现:
from io import BytesIO
from tempfile import NamedTemporaryFile
def save_virtual_workbook(workbook):
with NamedTemporaryFile() as tf:
workbook.save(tf.name)
in_memory = BytesIO(tf.read())
return in_memory.getvalue()
答案 3 :(得分:1)
在openpyxl 2.6中,调用save_virtual_workbook
方法会发出以下警告:
DeprecationWarning: Call to deprecated function save_virtual_workbook (Use a NamedTemporaryFile).
有时save_virtual_workbook
将从openpyxl中删除。
在Python 3中,将openpyxl工作簿保存到文件流的典型用法变为:
from io import BytesIO
from tempfile import NamedTemporaryFile
from openpyxl import Workbook
wb = Workbook()
with NamedTemporaryFile() as tmp:
wb.save(tmp.name)
output = BytesIO(tmp.read())
答案 4 :(得分:0)
来自openpyxl导入工作簿 从io import BytesIO
行= [[1,2 ,, [3,4]]
book = Workbook() 工作表= book.active
对于行中的行: sheet.append(row)
io =字节IO book.save(io)
content = io.getValue()
返回响应( 内容, mimetype = magic.from_buffer(content,mime = True), 标头= { 'Content-Disposition':'attachment; filename ='+'test.xlsx'} )