來自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html
近日寫的一個程序需要在WEB服務器上生成EXCEL文件供用戶下載,研究了一下找到了以下比較可行的實現方案,下面以web.py為例,把相關代碼貼出來供大家參考:
首先需要下載生成EXCEL的模塊,推薦使用xlwt
import xlwt
import StringIO
import web
urls = (
'/rim_request','rim_request',
'/rim_export','rim_export',
'/(.*)', 'index'
)
class rim_export:
#render = web.template.render('adsl')
def GET(self):
web.header('Content-type','application/vnd.ms-excel') #指定返回的類型
web.header('Transfer-Encoding','chunked')
web.header('Content-Disposition','attachment;filename="export.xls"') #設定用戶瀏覽器顯示的保存文件名
wb=xlwt.Workbook()
wb.encoding='gbk'
ws=wb.add_sheet('1')
ws.write(0,1,'123') #如果要寫中文請使用UNICODE
sio=StringIO.StringIO()
wb.save(sio) #這點很重要,傳給save函數的不是保存文件名,而是一個StringIO流
return sio.getvalue()
這個方案的好處是不需要生成臨時文件,就可以把EXCEL文件以流的形式直接返回到用戶瀏覽器
生成excel文件亂碼問題
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = 'SimSun' # 指定“宋體” style.font = font table.write(1, 1, '測試', style) # 使用 style