通过文本和文件流保存openpyxl文件

时间:2011-12-12 03:32:52

标签: python excel filestream openpyxl

我正在将OpenPyXL构建到一个应用程序中,该应用程序需要一个包含excel文件内容的字符串,以便通过文件流进行写入。

从我对OpenPyXL源代码的调查来看,它看起来不像是支持这种输出。有没有人有修改openpyxl的经验来支持这个?

或任何一般性建议/解决方法?

感谢。

5 个答案:

答案 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'} )