django文档操作

文档操作

# -*- coding: utf-8 -*-
# @Time    : 2019-06-15 16:40
# @Author  : songmz
# @email  : bettersong@canway.net
import datetime
import xlwt
import xlrd
import requests
import json
from common.log import logger
from django.http import JsonResponse, HttpResponse, FileResponse
import sys

reload(sys)
sys.setdefaultencoding('utf-8')


def down_doc(request):
    file_info = open('./home_application/utiles/docs/info.docx', 'rb')
    response = FileResponse(file_info)
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = 'attachment;filename="{0}"'.format(u'策略模板说明文档.docx')
    return response


def down_excel(request):
    file_info = open('./home_application/utiles/docs/name.xls', 'rb')
    response = FileResponse(file_info)
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = 'attachment;filename="{0}"'.format(u'模版.xls')
    return response


def import_doc(request):
    file = request.FILES.get("file")
    with open("./home_application/utiles/docs/%s" % file.name, 'wb+') as  f:
        for line in file.chunks():
            f.write(line)


def export_excel(request):
    """
       导出excel文件
       :param request:
       # 模块
       class BizInfo(models.Model):
       cw_biz_id = models.IntegerField(u'系统ID')
       cw_biz_name = models.CharField(u'系统名称', max_length=32)
       is_delete = models.BooleanField(u'是否删除', default=False)
       updated_date = models.DateTimeField(u'更新时间', auto_now=True, null=True, blank=True)

       class Meta:
           verbose_name = u"系统信息表"
           verbose_name_plural = u"系统信息表"
       :return:
       """
    style_bold_red = xlwt.easyxf('font:color-index black,bold on')
    header_style = style_bold_red  # 设置表头样式
    wb = xlwt.Workbook()  # 创建一个book
    ws = wb.add_sheet('sheet1')  # 添加一个工作表
    # 表头信息.
    ws.write(0, 0, u"主键id", header_style)
    ws.write(0, 1, u"系统ID", header_style)
    ws.write(0, 2, u"系统名称", header_style)
    ws.write(0, 3, u"更新时间", header_style)
    try:
        # 查询导出的数据信息
        gathers = BizInfo.objects.all()
        j = 1
        for gather in gathers:
            value = []
            # 每行添加数据顺序跟表头信息排序一一对应
            value.append(gather.id)
            value.append(gather.cw_biz_id)
            value.append(gather.cw_biz_name)
            value.append(gather.updated_date)
            # 按索引得到对应的sheet
            log_info = wb.get_sheet(0)
            for i in range(0, len(value)):
                # 判断单元格中的数据格式
                if isinstance(value[i], unicode):
                    v = value[i]
                else:
                    v = str(value[i])
                log_info.write(j, i, v)
            j += 1
        response = HttpResponse(content_type='application/vnd.ms-excel', charset='utf-8')
        response['Content-Disposition'] = r'attachment; filename={filename}'.format(filename=u"name") \
                                          + '.xls'
        wb.save(response)
        return response
    except Exception as e:
        logger.exception(u"异常信息:{}".format(e))
        result = {'result': False, "error": e, "message": u"导出信息失败"}
        return JsonResponse(result)


def import_excelt(request):
    """
    导入excel文件
    :param
    :return:
    """
    if len(request.FILES) <= 0:
        return JsonResponse({'result': False, 'message': u'未检测到上传文件'})

    f = request.FILES.get("file")
    try:
        book = xlrd.open_workbook(filename=None, file_contents=f.read())
        sheet = book.sheet_by_index(0)
    except Exception as e:
        logger.exception(e)
        return JsonResponse({'result': False, 'message': u'无法打开文件'})
    if sheet.ncols != 4:
        return JsonResponse({'result': False, 'message': u'文件格式错误'})
    headers = [u"主键id", u"系统ID", u"系统名称", u'更新时间']
    # 检查头部信息是否匹配
    headers_match = True
    for i in range(0, 4):
        if sheet.cell(0, i).value != headers[i]:
            headers_match = False
            break
    if headers_match is False:
        return JsonResponse({'result': 0, 'message': u'文件格式错误'})
    error_data = []
    for i in range(1, sheet.nrows):
        # 依次循环 获取每条的数据
        error_info = {}
        id = sheet.cell(i, 0).value  # 主键id
        cw_biz_id = sheet.cell(i, 1).value  # 系统ID
        cw_biz_name = sheet.cell(i, 2).value  # 系统名称
        updated_date = sheet.cell(i, 3).value  # 更新时间

        object_info = BizInfo.objects.filter(id=id)
        if len(object_info) == 1:
            object_info.update(cw_biz_id=cw_biz_id, cw_biz_name=cw_biz_name, updated_date=updated_date)
        else:
            error_info['info'] = u"系统名称为{cw_biz_name}匹配不存在,请检查".format(cw_biz_name=cw_biz_name)
            error_data.append(error_info)
    if error_data:
        result = {'result': False, "data": error_data, "message": u"导入完成"}
    else:
        result = {'result': False, "data": "", "message": u"导入成功"}
    return JsonResponse(result)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beter138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值