导出事件excel part2

This commit is contained in:
caoqianming 2023-02-08 23:14:14 +08:00
parent 73b0ce7cb7
commit cb33dcb021
3 changed files with 32 additions and 22 deletions

View File

@ -76,8 +76,10 @@ class NotifySettingsSerializer(CustomModelSerializer):
class EventSerializer(serializers.ModelSerializer):
area_ = AreaSerializer(source='area', read_only=True)
area_name = serializers.CharField(source='area.name', read_only=True)
cates_ = EventCateSimpleSerializer(source='cates', read_only=True, many=True)
employee_ = EmployeeSimpleSerializer(source='employee', read_only=True)
employee_name = serializers.CharField(source='employee.name', read_only=True)
operation_name = serializers.CharField(source='opl.operation.name', read_only=True)
vchannel_ = TDeviceSimpleSerializer(source='vchannel', read_only=True)
handle_user_name = serializers.CharField(source='handle_user.name', read_only=True)

View File

@ -30,6 +30,8 @@ obj_cate_dict = {'people': '人员', 'operation': '作业', 'other': '其他'}
mark_dict = {10: '正常', 20: '误报'}
# Create your views here.
class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, CustomGenericViewSet):
perms_map = {'get': '*', 'put': 'event_cate.update', 'post': 'event_cate.create'}
queryset = EventCate.objects.all()
@ -152,7 +154,8 @@ class EventViewSet(ListModelMixin, RetrieveModelMixin, DestroyModelMixin, Custom
{"name": "事件种类", "type": "str"},
{"name": "发生区域", "type": "str"},
{"name": "事件类型", "type": "str"},
{"name": "事件对象", "type": "str"},
{"name": "当事人", "type": "str"},
{"name": "所属作业", "type": "str"},
{"name": "发生时间", "type": "str"},
{"name": "处理人", "type": "str"},
{"name": "事件标记", "type": "str"},
@ -165,24 +168,27 @@ class EventViewSet(ListModelMixin, RetrieveModelMixin, DestroyModelMixin, Custom
odata = EventSerializer(queryset, many=True).data
# 处理数据
data = []
for i in odata:
cates_str = ''
ep_str = ''
for m in i['cates_']:
cates_str = cates_str + '/' + m['name']
cates_str = cates_str + m['name'] + '/'
data.append(
[
cates_str,
i['area_'].get('name', ''),
obj_cate_dict[i['obj_cate']],
'test',
i['create_time'],
i['handle_user_name'],
mark_dict[i['mark']],
i['global_img'],
i['face_img']
cates_str,
i.get('area_name', None),
obj_cate_dict[i['obj_cate']],
i.get('employee_name', None),
i.get('operation_name', None),
i['create_time'],
i.get('handle_user_name', None),
mark_dict[i['mark']],
i['global_img'],
i['face_img']
]
)
print(data)
return Response({'path': export_excel_img(field_data, data, '事件记录')})

View File

@ -7,6 +7,7 @@ from openpyxl import Workbook, styles
from openpyxl.drawing.image import Image
from openpyxl.utils import get_column_letter, column_index_from_string
def len_byte(value):
# 获取字符串长度一个中文的长度为2
length = len(value)
@ -111,6 +112,7 @@ def export_excel(field_data: list, data: list, FileName: str):
wbk.save(path_name)
return path + FileNameF
def export_excel_img(field_data: list, data: list, FileName: str):
"""
带有image的Excel导出
@ -126,26 +128,26 @@ def export_excel_img(field_data: list, data: list, FileName: str):
imgs = []
for index, value in enumerate(field_data):
cell = ws.cell(column=index, row=0)
cell = ws.cell(column=index+1, row=1)
cell.value = value['name']
cell.font = styles.Font(bold=True)
letter = get_column_letter(index+1)
value['letter'] = letter
ws.column_dimensions[letter].width = 10 #修改列宽
ws.column_dimensions[letter].width = 10 # 修改列宽
if value['type'] == 'img':
ws.column_dimensions[letter].width = 15 #修改列宽
ws.column_dimensions[letter].width = 15 # 修改列宽
for i1, v1 in enumerate(data):
for i2, v2 in enumerate(v1):
cell = ws.cell(column=i2, row=i1+1)
cell = ws.cell(column=i2+1, row=i1+2)
if v2 and field_data[i2]['type'] == 'img':
ws.row_dimensions[i1+1].height = 70
img = Image(settings.BASE_DIR + v2, width=90, height=90)
imgs.append((img, field_data[i2]['letter'] +str(i1+1)))
ws.row_dimensions[i1+2].height = 70
img = Image(settings.BASE_DIR + v2)
img.width, img.height = (90, 90)
imgs.append((img, field_data[i2]['letter'] + str(i1+2)))
else:
cell.value = v2
for i in imgs:
ws.add_image(i[0], i[1])
@ -157,4 +159,4 @@ def export_excel_img(field_data: list, data: list, FileName: str):
path_name = os.path.join(pathRoot, FileNameF)
wb.save(path_name)
return path + FileNameF
return path + FileNameF