텍스트 및 파일스트림을 통해 openpyxl 파일 저장
OpenPyXL을 파일 스트림을 통해 쓰기 위해 엑셀 파일의 내용을 포함하는 문자열이 필요한 어플리케이션으로 만들고 있습니다.
OpenPyXL 소스 코드를 조사한 결과, 이러한 출력을 지원하지 않는 것 같습니다.이를 지원하기 위해 openpyxl을 수정한 경험이 있는 사람이 있습니까?
또는 일반적인 조언/회피책은 무엇입니까?
감사해요.
jcollado의 답변은 실제로 유효하지만 openpyxl에는 "save_virtual_disples"라는 함수(아직 문서화되어 있지 않음)writer.writer.writer는 워크북을 문자열로 반환합니다.
from openpyxl.workbook import Workbook
from openpyxl.writer.excel import save_virtual_workbook
wb = Workbook()
print save_virtual_workbook(wb)
찾고 있는 문자열은 save_virtual_workbook()에서 반환된 문자열입니다.
openpyxl 2.6에서는save_virtual_workbook
method는 다음 경고를 발행합니다.
DeprecationWarning: Call to deprecated function save_virtual_workbook (Use a NamedTemporaryFile).
어느 순간save_virtual_workbook
openpyxl에서 제거됩니다.
Python 3에서는 openpyxl 워크북을 filestream에 저장하는 일반적인 방법은 다음과 같습니다.
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())
워크북 구현 검토 후save
메서드에서는 '파일명'이 ZipFile로 직접 전송됩니다.ZipFile은 경로 또는 파일 유사 개체를 받아들이기 때문에 이름 지정이 필요 없습니다.Temporary File 및 메모리 내 바이트 사용IO:
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
를 사용하는 것은 어떨까요?StringIO
파일 내용을 저장하는 object:
from openpyxl.workbook import Workbook
from StringIO import StringIO
output = StringIO()
wb = Workbook()
wb.save(output)
print output.getvalue()
찾고 있는 문자열은 이 예의 마지막 줄에 인쇄되어 있는 문자열입니다.
와의 호환성이 있는 실장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()
from openpyxl import Workbook
from io import BytesIO
rows = [[1,2], [3,4]]
book = Workbook()
sheet = book.active
for row in rows:
sheet.append(row)
io = BytesIO
book.save(io)
content = io.getValue()
return Response(
content,
mimetype=magic.from_buffer(content, mime=True),
headers={
'Content-Disposition': 'attachment;filename=' + 'test.xlsx'}
)
언급URL : https://stackoverflow.com/questions/8469665/saving-openpyxl-file-via-text-and-filestream
'programing' 카테고리의 다른 글
Postgres에 대량 삽입하는 가장 빠른 방법은 무엇입니까? (0) | 2023.04.09 |
---|---|
Bash에서 파일 내용을 루프하는 중 (0) | 2023.04.09 |
WPF UserControl은 어떻게 WPF UserControl을 상속합니까? (0) | 2023.04.09 |
R의 두 목록을 결합하는 방법 (0) | 2023.04.09 |
Forked Repo에서 풀 요청을 업데이트하려면 어떻게 해야 합니까? (0) | 2023.04.09 |