From cb33dcb021b200f961af8890bc4c2b593bc02e38 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 8 Feb 2023 23:14:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E4=BA=8B=E4=BB=B6excel=20par?= =?UTF-8?q?t2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ecm/serializers.py | 2 ++ apps/ecm/views.py | 30 ++++++++++++++++++------------ apps/utils/export.py | 22 ++++++++++++---------- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/apps/ecm/serializers.py b/apps/ecm/serializers.py index dc7a82a0..c74674dd 100644 --- a/apps/ecm/serializers.py +++ b/apps/ecm/serializers.py @@ -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) diff --git a/apps/ecm/views.py b/apps/ecm/views.py index 82b4331e..5bb4d1f5 100644 --- a/apps/ecm/views.py +++ b/apps/ecm/views.py @@ -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, '事件记录')}) diff --git a/apps/utils/export.py b/apps/utils/export.py index 26c5e3b8..d9a4a0f0 100644 --- a/apps/utils/export.py +++ b/apps/utils/export.py @@ -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 \ No newline at end of file + return path + FileNameF