django 上传,下载excel

关于这里只把示例部分的url.py view.py html模板部分

url.py

from django.conf.urls import include, url
from django.contrib import admin
from mysites.views import index, upload_file, report_down_load

urlpatterns = [
    # Examples:
    # url(r'^$', 'untitled1.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^index/$', index),
    url(r'^upload_file/$', upload_file),
    url(r'^report_down_load/$', report_down_load),
]

view.py

from django.http import HttpResponse
from django.shortcuts import render, render_to_response
import os
import xlrd

# Create your views here.
from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt


def index(request):
    return render_to_response("index.html", '', context_instance=RequestContext(request))


@csrf_exempt
def upload_file(request):
    if request.method == 'POST':
        myFile = request.FILES.get('myfile', None)
        if not myFile:
            return HttpResponse('no file for upload')
        excelFile = open(os.path.join('/Users/eruake/Desktop/code/hkwork/untitled1/', myFile.name), 'wb+')
        for chunk in myFile.chunks():
            excelFile.write(chunk)
            excelFile.close()
        #
        excel = xlrd.open_workbook('/Users/eruake/Desktop/code/hkwork/untitled1/'+myFile.name)
        sheet = excel.sheet_by_index(0)

        # sheet = excel.sheet_by_name('mywork')
        nrows = sheet.nrows
        for i in range(nrows):
            # get value you can save to database
            v = sheet.cell(0, 0).value

        return HttpResponse('upload over!')

import xlwt
import django.utils.timezone as timezone

@csrf_exempt
def report_down_load(request):
    wb = xlwt.Workbook()
    sheet = wb.add_sheet('report')
    filename = timezone.now().strftime("%Y%m%d %H%M%S") + '.xls'
    # 
    # set data
    # and set xls file style 这里要说明一点的时,我们可以设置excel模板的样式,可以通过xlrd先读取,再使用xlutils.copy
    # 来实现写,但是由于xlutils是不能读取复制样式,如背景颜色 字体样式等 所以我建议直接使用xlwt来控制样式
    response = HttpResponse(content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment; filename=' + filename
    wb.save(response)
    return response

template 里的index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form enctype="multipart/form-data" action="/upload_file/" method="post">
   <input type="file" name="myfile" />
   <br/>
   <input type="submit" value="upload"/>

</form>

<p>------------------------</p>
<form enctype="multipart/form-data" action="/report_down_load/" method="post">
    <input type="submit" value="download"/>
</form>
</body>
</html>

猜你喜欢

转载自my.oschina.net/u/198124/blog/824780