关于读取excel 和 写excel
Posted 少年乘风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于读取excel 和 写excel相关的知识,希望对你有一定的参考价值。
def prepare_crm_data_from_excel(request): ‘‘‘Get potential student from excel ‘‘‘ if request.method == ‘POST‘: user = request.user result_dict = {} if not request.FILES: return HttpResponse(‘请选择上传文件‘) f = request.FILES[‘file‘] if str(f).split(‘.‘)[-1] not in [‘xlsx‘, ‘xls‘]: return HttpResponse(‘请上传(xlsx, xls)‘) wb2 = openpyxl.load_workbook(f) fields = [] datas = [] crm_list = [] for table in wb2.worksheets: for row in table.rows: if not fields: fields.extend([column.value for column in row]) continue d = {} index = 0 for column in row: try: d[index] = column.value.strip() except AttributeError: d[index] = column.value index += 1 if any(d.values()): datas.append(d) order_fields = {i[0]: i[1] for i in enumerate(fields)} for data in datas: d = {‘user‘: user} for k, v in list(data.items()): key_index = order_fields[k] if not key_index: continue crm_key = ALL_FIELDS[key_index] d[crm_key] = v crm_list.append(d) sync_db(crm_list) result_dict[‘result‘] = ‘ok‘ return Response(result_dict, status=status.HTTP_200_OK) html = """<form action="" method="POST" enctype="multipart/form-data"> <input type="file" name="file" /><input type="submit"/></form>""" response = HttpResponse(html) response["Allow-Control-Allow-Origin"] = ‘*‘ return response
def sync_db(data_list): ‘‘‘Synchron potential student from excel to PrepareToCrm ‘‘‘ push_list = [] m_q = {i[‘mobile‘]: i[‘qudao_details‘] for i in PrepareToCrm.objects.values(‘mobile‘, ‘qudao_details‘)} [m_q.setdefault(i[‘phone‘], i[‘qudao_details‘]) for i in PrepareToCrm.objects.filter(phone__isnull=False).values( ‘phone‘, ‘qudao_details‘)] [m_q.setdefault(i[‘other_phone‘], i[‘qudao_details‘]) for i in PrepareToCrm.objects.filter(other_phone__isnull=False).values( ‘other_phone‘, ‘qudao_details‘)] for data_dict in data_list: try: if data_dict[‘mobile‘] == data_dict[‘phone‘]: data_dict[‘phone‘] = None except KeyError: data_dict[‘phone‘] = None try: if data_dict[‘mobile‘] == data_dict[‘other_phone‘]: data_dict[‘other_phone‘] = None except KeyError: data_dict[‘other_phone‘] = None try: if data_dict[‘phone‘] == data_dict[‘other_phone‘]: data_dict[‘other_phone‘] = None except KeyError: data_dict[‘other_phone‘] = None mobile = str(data_dict[‘mobile‘]) if data_dict[‘mobile‘] else None phone = str(data_dict[‘phone‘]) if data_dict[‘phone‘] else None other_phone = str( data_dict[‘other_phone‘]) if data_dict[‘other_phone‘] else None mobiles = [i for i in [mobile, phone, other_phone] if i] if not mobiles: data_dict[‘push_result‘] = ‘啥电话都没有‘ data_dict[‘feedback‘] = True else: for mobile in mobiles: if mobile not in m_q: m_q[mobile] = data_dict[‘qudao_details‘] else: qudao_details = m_q[mobile] data_dict[‘push_result‘] = ‘重复推送({})‘.format( qudao_details) data_dict[‘feedback‘] = True if not data_dict[‘create_user‘]: data_dict[‘create_user‘] = ‘9007‘ push_list.append(PrepareToCrm(**data_dict)) PrepareToCrm.objects.bulk_create(push_list)
程序写成Excel 发送邮箱
def run(): EXCEL_CACHE_PATH = "/tmp/_BI_EXCEL_CACHE" xlsxfile = ‘{}/push_result.xlsx‘.format(EXCEL_CACHE_PATH) custom_set = PrepareToCrm.objects.filter(user__isnull=False, feedback=True) if custom_set.exists(): user_list = set([custom_obj.user_id for custom_obj in custom_set]) for user_id in user_list: mobile_set = custom_set.filter(user_id=user_id).values(‘mobile‘, ‘name‘, ‘success‘, ‘apply_contry‘) result_list = [[‘学生姓名‘, ‘电话‘, ‘申请国家‘, ‘申请项目‘, ‘跟进顾问‘, ‘分校‘, ‘是否成功推送‘, ‘BI客户状态‘, ‘CRM客户状态‘, ‘备注‘], ] for mo_name in mobile_set: mobile = mo_name.get(‘mobile‘) name = mo_name.get(‘name‘) success = ‘推送成功‘ if mo_name.get(‘success‘) else ‘推送失败‘ apply_contry = mo_name.get(‘apply_contry‘) crp_status = ‘无状态‘ crm_status = ‘无状态‘ ad_set = Advisor_potential_student.objects.filter( Q(mobile__contains=mobile) | Q(phone__contains=mobile) | Q(other_phone__contains=mobile)).values(‘pk‘, ‘status‘, ‘education‘, ‘advisor__address_city‘, ‘advisor__full_name‘) crm_set = CrmDB.objects.using(‘crm‘).filter( Q(mobile__contains=mobile) | Q(phone__contains=mobile) | Q(other_phone__contains=mobile)).values(‘latest_status‘) education = ‘无‘ address_city = ‘无‘ full_name = ‘无‘ con_l = [] con_str = ‘‘ if ad_set.exists(): status_num = ad_set[0][‘status‘] education = ad_set[0][‘education‘] address_city = ad_set[0][‘advisor__address_city‘] full_name = ad_set[0][‘advisor__full_name‘] potential_id = ad_set[0][‘pk‘] crp_status = SOURCE_STATUS.get(status_num) remark_set = Advisor_student_remark.objects.filter(potential_id=potential_id).values(‘create_at‘, ‘content‘).order_by(‘-create_at‘) for remark in remark_set: time = remark[‘create_at‘].strftime(‘%Y-%m-%d %H:%M:%S‘) content = remark[‘content‘] w_content = ‘【‘ + time + ‘】‘ + ‘ ‘ + content + ‘\n‘ # 拼接备注的字符串 con_l.append(w_content) content_str = con_str.join(con_l) else: content_str = ‘无‘ if crm_set.exists(): try: status_num = crm_set[0][‘latest_status‘] crm_status = crm_status_dict.get(int(status_num)) except Exception as e: crm_status = ‘无状态‘ result_list.append( [name, mobile, apply_contry, education, full_name, address_city, success, crp_status, crm_status, content_str]) xlsx = openpyxl.Workbook() table = xlsx.active table.title = ‘data‘ for line in result_list: table.append(line) xlsx.save(xlsxfile) send_mail(user_id)
def send_mail(user_id): email_obj = User.objects.filter(id=user_id).values(‘email‘)[0] to_email = email_obj[‘email‘] if not to_email: return SMTP_HOST = "xxxxxx.qq.com" AUTH_USER = "[email protected]" AUTH_PASS = "xxxxxxxxxxxx123" email = MIMEMultipart() to_list = [ to_email ] from_addr = ‘xxxxxxxxxxxx.com‘ email[‘From‘] = from_addr email[‘To‘] = Header(COMMASPACE.join(to_list), ‘utf8‘) email[‘Subject‘] = Header(‘推送失败反馈‘, ‘utf-8‘) xlsxfile = ‘/tmp/_BI_EXCEL_CACHE/push_result.xlsx‘ with open(xlsxfile, ‘rb‘) as f: attach = MIMEApplication(f.read()) attach.add_header(‘Content-Disposition‘, ‘attachment‘, filename=‘push_result.xlsx‘) email.attach(attach) smtp = smtplib.SMTP_SSL(SMTP_HOST) smtp.login(AUTH_USER, AUTH_PASS) smtp.sendmail(from_addr, to_list, email.as_string())
以上是关于关于读取excel 和 写excel的主要内容,如果未能解决你的问题,请参考以下文章