Django后台数据导出为excel并下载

功能要求:导出数据到制定好的excel的模板文件中
在这里插入图片描述
刚开始做项目,一边摸索一边做,搜了很多资料,踩了很多坑,记录一下
在模型的admin.py文件中定义函数和要导出的字段
中间注释的代码是没有测试成功的,请跳过

import openpyxl
from django.http import HttpResponse
import datetime
from process_card_management.settings import BASE_DIR

str_base = str(BASE_DIR)
path = str_base + '/mytools/J2009002.xlsx'
print(path)
wb = openpyxl.load_workbook(path)


# get sheet from workbook
# sheet_list = wb.sheetnames
# print(sheet_list)

# create new sheet
# new_sheet = wb.create_sheet('mysheet')

# get sheet that already exists
# ws = wb.get_sheet_by_name(wb['Sheet1'])
# ws = wb['Sheet1']
# 获取活跃的sheet
# sheet1 = wb.active

# get cells from the sheet
# print(ws['A1'].value)

def export_model_as_excel(modeladmin, request, queryset):
    print(queryset, type(queryset))
    response = HttpResponse(content_type='application/msexcel')
    response['Content-Disposition'] = 'attachment; filename={}.xlsx'.format(datetime.datetime.now())
    ws = wb['Sheet1']
    for obj in queryset:
        # 用户代码
        ws.cell(row=3, column=4, value=obj.user_code)
        # 产品名称
        ws.cell(row=3, column=9, value=obj.product_name)
        # 出货时间
        ws.cell(row=3, column=13, value=str(obj.shipment_date.strftime(u'%Y年%m月%d日%H时')))
        # 产品型号
        ws.cell(row=4, column=4, value=obj.product_model_number)
        # 测量范围
        ws.cell(row=4, column=9, value=obj.measuring_range)
        # 数量
        ws['M4'].value = obj.quantity
        # 准确度
        ws['P4'].value = obj.accuracy
        # 供电电源
        ws['D5'].value = obj.power_supply
        # 输出信号
        ws['I5'].value = obj.output_signal
        # 打印要求
        ws['K6'].value = obj.print_content
        # 测量介质
        ws['D6'].value = obj.measuring_medium
        # 密度(仅液位)
        ws['I6'].value = obj.density
        # 介质温度
        ws['D7'].value = str(obj.medium_temperature_min) + '~' + str(obj.medium_temperature_max)
        # 补偿温度
        ws['I7'].value = obj.compensation_temperature
        # 显示方式
        ws['D8'].value = obj.display_mode
        # 电气接口
        ws['D8'].value = obj.electrical_interface
        # 线长
        ws['D9'].value = obj.line_length
        # 过程接口
        ws['I9'].value = obj.process_interface
        # 接线方式
        ws['D10'].value = obj.wiring_method
        # 其他特殊要求
        ws['D11'].value = obj.special_instructions
        break
    wb.save(response)

    return response


export_model_as_excel.short_description = u'导出为excel'

最后在模型管理类cardAdmin中添加

actions = [export_model_as_excel]
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jiucheng18

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

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

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

打赏作者

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

抵扣说明:

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

余额充值