django 結合 xlwt 實現數據導入excel 並下載

內容借鑑:  django實現保存Excel、讀取Excel、將數據庫中的數據導出到Excelhtml

實現功能::前端

  前端將數據傳過來, 後端將數據寫入excel表格並下載。python

  注: 將數據庫數據導入excel 並下載同理ajax

 

原理分析:數據庫

  咱們在後臺現將數據一二進制形式寫入內存中, 使用HttpResponse, 進行返回並指明返回類型,  規定好文件名便可,django

過程:後端

  咱們在前端經過post 或get將數據提交過來, 後端將內容讀出寫入並下載。app

  注: 在使用ajax請求時實現不了下載功能。post

 

前端:ui

<div>
    <form class="layui-form" method="post" action="{% url 'myUtils:createtable' %}">
        <div class="layui-form-item layui-form-text">
            <label class="layui-form-label">內容</label>
            <div class="layui-input-block text-content">
            <textarea name="desc" placeholder="請輸入內容, 表格列劃分是以空格劃分, 行劃分是以換行來劃分的" class="layui-textarea text"></textarea>
            </div>
        </div>
        <div class="layui-form-item">
        <div class="layui-input-block">
            <button class="layui-btn submit" lay-submit lay-filter="formDemo">當即提交</button>
            <button type="reset" class="layui-btn layui-btn-primary reset">重置</button>
        </div>
        </div>
    </form>   
</div>

 

view 代碼:

class CreateTable(View):

    def get(self, request):
        return render(request, template_name="html/createtable.html", context={})

    def post(self, request):
        text = request.POST.get('desc')
        if text:
        # 指定文件類型
        # response = HttpResponse(content_type='application/octet-stream')
            #指定數據類型爲excel
            response = HttpResponse(content_type='application/ms-excel')
            # 設置文件名
            response['Content-Disposition'] =  'attachment; filename="result.xls"'
            # 建立工做薄    
            wb = xlwt.Workbook(encoding='utf-8')
            # 建立表
            ws = wb.add_sheet("new sheet")
            font_style = xlwt.XFStyle()
            # 指定二進制
            font_style.font.bold = True
            # 寫入表格
            text_rows = text.split("\n")
            for row, row_data in enumerate(text_rows):
                row_data = row_data.strip().split(" ")
                for col, col_data in enumerate(row_data):
                    ws.write(row, col, col_data, font_style)
            font_style = xlwt.XFStyle()
            wb.save(response)
        return response
相關文章
相關標籤/搜索