django 上传xls表格,下载xls表格

from django.shortcuts import render,HttpResponse
from django.views import View
import xlrd
from .forms import UploadExcelForm
from .models import *
from xlwt import *
import os
from io import StringIO,BytesIO
# from .ex
# Create your views here.


def index(request):
    return render(request, 'index.html')

class UploadFiles(View):
    def post(self,request,*args,**kwargs):
        form = UploadExcelForm(request.POST,request.FILES)
        if form.is_valid():
            wb = xlrd.open_workbook(
                filename=None, file_contents=request.FILES['excel'].read())  # 关键点在于这里
            table = wb.sheets()[0]
            tables = list(set([y for x in table._cell_values for y in x]))
            for i in range(1, len(tables)):
                col = tables[i]
                Key_Models.objects.create(key=col)
            return HttpResponse("ok")
        else:
            return HttpResponse('error')

    def get(self,request,*args,**kwargs):
        list_obj = Key_Models.objects.all()
        if list_obj:
            # 创建工作薄
            ws = Workbook(encoding='utf-8')
            w = ws.add_sheet(u"关键字报表")
            w.write(0, 0, "id")
            w.write(0, 1, u"关键字")
            w.write(0, 2, u"类别")
            # 写入数据
            excel_row = 1
            for obj in list_obj:
                data_id = obj.id
                data_tag = str(list(obj.tag.all())).replace('[','').replace(']','')
                # data_user = obj.username
                # data_time = obj.time.strftime("%Y-%m-%d")[:10]
                # data_content = obj.content
                # dada_source = obj.source
                w.write(excel_row, 0, data_id)
                w.write(excel_row, 1, obj.key)
                w.write(excel_row, 2, data_tag)
                # w.write(excel_row, 3, data_content)
                # w.write(excel_row, 4, dada_source)
                excel_row += 1
            # 检测文件是够存在
            # 方框中代码是保存本地文件使用,如不需要请删除该代码
            ###########################
            exist_file = os.path.exists("warning.xls")
            if exist_file:
                os.remove(r"warning.xls")
            ws.save("warning.xls")
            ############################
            sio = BytesIO()
            ws.save(sio)
            sio.seek(0)
            response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel')
            response['Content-Disposition'] = 'attachment; filename=warning.xls'
            response.write(sio.getvalue())
            return response

view.py

index.html

<p>上传EXCEL表格.xls</p>
<form class="" action="{% url 'uploadtag' %}" method="post" enctype="multipart/form-data" >
    {% csrf_token %}
    <input type="file" name="excel">
    <button type="submit">提交</button>
</form>
<a href="{% url 'uploadtag' %}">导出表格.xls</a>
from django import forms
from django.utils.translation import gettext as _
from django.core.exceptions import ValidationError
def validate_excel(value):
    if value.name.split('.')[-1] not in ['xls','xlsx']:
        raise ValidationError(_('Invalid File Type: %(value)s'),params={'value': value},)


class UploadExcelForm(forms.Form):

    excel = forms.FileField(validators=[validate_excel]) #这里使用自定义的验证

form.py

二,导出表格方式

            path = XLSS_DIRS[0] + '/' + '{time}.xlsx'.format(time='develop_key')
            if os.path.exists(path):
                os.remove(path)
            ws.save(path)
            file = open(path, 'rb')  #django 自带导出表格
            response = FileResponse(file)
            response['Content-Type'] = 'application/octet-stream'
            response['Content-Disposition'] = 'attachment;filename="develop_key.xlsx"'
            return response

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值