2013-03-26 5 views
7

나는 다음과 같은 방법으로 스프레드 시트 작성에 사용하고 있습니다 : 은 즉시 시트를 엑셀 쓰기 xlwt

wbk = xlwt.Workbook() 
    earnings_tab = wbk.add_sheet('EARNINGS') 
    wbk.save(filepath) 

이 파일 경로에 파일을 저장할 수있는 방법이 있는가, 그리고 대신에-the-를 쓰기 파일을 다운로드 한 사용자에게 알려주시겠습니까? 또는 tmp 파일로 저장 한 다음 사용자에게 제공해야합니까?

+0

장고 사용자 : 당신은 HttpResponse에 저장할 수 있습니다. – Havvy

답변

13

the documentation for the .save() method of xlwt을 인용하면

그것도 엑셀 파일에 대한 데이터가 스트림에 기록되는 경우에 이러한 StringIO 같은 기록 방법 스트림 오브젝트 일 수있다.

수정 예 :

import StringIO 

f = StringIO.StringIO() # create a file-like object 

wbk = xlwt.Workbook() 
earnings_tab = wbk.add_sheet('EARNINGS') 

wbk.save(f) # write to stdout 

일부는 대신 StringIOcStringIO을 사용하는 것이 좋습니다 수 있지만, 마지막으로 내가 제대로 유니 코드를 처리하지 않습니다을 선택하면 cStringIO 미리 양해.

StringIO이 파이썬 3에서 io으로 대체되었습니다.

+0

object와 같은 파일에서 (io.read())를 읽으려면 io.seek (0)을 추가해야합니다. –

7

이 내가 장고에 사용하는 것입니다 :

response = HttpResponse(content_type='application/vnd.ms-excel') 
response['Content-Disposition'] = 'attachment; filename=file.xls' 
book.save(response) 
return response 
0
class QueryToExcel(object): 
def __init__(self, doc_name = 'doc_name'): 
    #some set up stuff 
    self.b_io = BytesIO() 
    self.workbook = pd.ExcelWriter(self.b_io, engine='xlsxwriter') 
    self.run() #fill in workbook with pandas dataframes 
    self.workbook.save() 

def get_workbook(self): 
    return self.b_io.getvalue() 


app = Flask(__name__) 
app.debug = True 
@app.route('/pvh/', methods = ['GET']) 
def get_workbook(self): 
    return self.b_io.getvalue() 
관련 문제