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