安裝
pip install Flask-Excel pip install pyexcel-xls pip install pyexcel-xlsx pip install pyexcel-ods
文檔
http://flask-excel.readthedocs.org/en/latest/
flask初始化:
from flask import Flask, request, jsonify import flask_excel as excel app = Flask(__name__) @app.route("/download", methods=['GET']) def download_file(): return excel.make_response_from_array([[1, 2], [3, 4]], "csv") @app.route("/export", methods=['GET']) def export_records(): return excel.make_response_from_array([[1, 2], [3, 4]], "csv", file_name="export_data") @app.route("/download_file_named_in_unicode", methods=['GET']) def download_file_named_in_unicode(): return excel.make_response_from_array([[1, 2], [3, 4]], "csv", file_name=u"中文文件名") # insert database related code here if __name__ == "__main__": excel.init_excel(app) app.run()
使用
前台:
<table class="table table-bordered m-t"> <thead> <tr> <th>頭像</th> <th>姓名</th> <th>性別</th> <th>狀態</th> <th>操作</th> </tr> </thead> <tbody> {% if list %} <a class="m-l" href="{{ buildUrl('/member/export') }}" title="數據導出"> <i class="fa fa-sign-out" ></i>數據導出 </a> {% for item in list %} <tr> <td><img alt="image" class="img-circle" src="{{ item.avatar }}" style="width: 40px;height: 40px;"></td> <td>{{ item.nickname }}</td> <td>{{ item.sex_desc }}</td> <td>{{ item.status_desc }}</td> <td> <a href="{{ buildUrl('/member/info') }}?id={{ item.id }}"> <i class="fa fa-eye fa-lg"></i> </a> {% if item.status == 1 %} <a class="m-l" href="{{ buildUrl('/member/set') }}?id={{ item.id }}"> <i class="fa fa-edit fa-lg"></i> </a> <a class="m-l remove" href="javascript:void(0);" data="{{ item.id }}"> <i class="fa fa-trash fa-lg"></i> </a> {% else %} <a class="m-l recover" href="javascript:void(0);" data="{{ item.id }}"> <i class="fa fa-rotate-left fa-lg"></i> </a> {% endif %} </td> </tr> {% endfor %} {% else %} <tr> <td colspan="5">暫無數據</td> </tr> {% endif %} </tbody> </table>
后台實現:
from application import app,db import flask_excel as excel import re route_member = Blueprint( 'member_page',__name__ ) # 初始化excel ''' 在路由的開頭導入flask_excel,注意一定要用init_excel,否則會出現錯誤: ValueError: View function did not return a response ''' excel.init_excel(app) @route_member.route("/export", methods=['GET']) def export_records(): query_sets = Member.query.order_by(Member.id.desc()).all() column_names = ['姓名', '性別','狀態'] excel_data = make_excel_list(query_sets,['nickname','sex_desc','status_desc'],column_names) app.logger.info(excel_data) return excel.make_response_from_array(excel_data,file_type='xls', file_name='export_member%s' %(getStrDate()), sheet_name='會員表') #匯總Excel數據 def make_excel_list(data, fields, column_names): list_data = [] list_data.append(column_names) for item in data: tmp = [] for fi in fields: tmp.append(getattr(item,fi)) list_data.append(tmp) return list_data
后台model:
class Member(db.Model): __tablename__ = 'member' id = db.Column(db.Integer, primary_key=True) nickname = db.Column(db.String(100), nullable=False, server_default=db.FetchedValue()) mobile = db.Column(db.String(11), nullable=False, server_default=db.FetchedValue()) sex = db.Column(db.Integer, nullable=False, server_default=db.FetchedValue()) status = db.Column(db.Integer, nullable=False, server_default=db.FetchedValue()) # 虛擬屬性(數據庫中沒有的字段) @property def status_desc(self): return app.config['STATUS_MAPPING'][ str( self.status ) ] @property def sex_desc(self): sex_mapping = { "0":"未知", "1":"男", "2":"女" } return sex_mapping[str(self.sex)]
效果: