功能要求:导出数据到制定好的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]