Nel*_*haw 22 python excel filestream openpyxl
我正在将OpenPyXL构建到一个应用程序中,该应用程序需要一个包含excel文件内容的字符串,以便通过文件流进行写入.
从我对OpenPyXL源代码的调查来看,它看起来不像是支持这种输出.有没有人有修改openpyxl的经验来支持这个?
或者任何一般性建议/解决方法?
谢谢.
Eri*_*oni 36
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)
Run Code Online (Sandbox Code Playgroud)
你要找的是save_virtual_workbook()返回的字符串
ade*_*nes 28
在 openpyxl 2.6 中调用该save_virtual_workbook方法会发出以下警告:
DeprecationWarning: Call to deprecated function save_virtual_workbook (Use a NamedTemporaryFile).
Run Code Online (Sandbox Code Playgroud)
在某些时候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())
Run Code Online (Sandbox Code Playgroud)
查看 WorkBooksave方法的实现后,“文件名”被直接发送到 ZipFile,它接受路径或类文件对象,因此不需要 NamedTemporaryFile,只需使用内存中的 BytesIO:
from io import BytesIO
from openpyxl import Workbook
wb = Workbook()
virtual_workbook = BytesIO()
wb.save(virtual_workbook)
# now use virtual_workbook to send to a stream; email attachment, etc
Run Code Online (Sandbox Code Playgroud)
jco*_*ado 16
如何使用StringIO对象保存文件的内容:
from openpyxl.workbook import Workbook
from StringIO import StringIO
output = StringIO()
wb = Workbook()
wb.save(output)
print output.getvalue()
Run Code Online (Sandbox Code Playgroud)
您正在寻找的字符串是在此示例的最后一行中打印的字符串.
Tha*_*yen 10
save_virtual_workbook自版本 2.6 起已弃用的兼容实现:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9793 次 |
| 最近记录: |