Excel导入数据库(vue+py)py部分

2 篇文章 0 订阅
2 篇文章 0 订阅

1. 生成对应Excel模板

2. 获取用户上传的Excel文件

3. 获取Excel数据

主要为自己工作内容记录,十分笼统,欢迎私信交流~~

import datetime
import time
import json
import pymysql
from django.conf import settings
from django.forms import model_to_dict
from django.http import HttpResponse, JsonResponse
from rest_framework.views import APIView
from openpyxl import Workbook, load_workbook
from authority.xincryption import XDECRYPT, XENCRYPT
from authority.models import Role, Menu
from echart_data.models import Version
from .models import Account, Role, Function, Menu, Log
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment
from django.db.models import Q
import os


class GenerateExcelTemplate(APIView):
    def post(self, request):
        user_id = request.META.get("HTTP_USER_ID")
        user_name = request.META.get("HTTP_USER_NAME")
        roles = request.META.get("HTTP_ROLES")
        # aToZ = [chr(i) for i in range(65, 91)]

        # 0. 生成Excel模板
        wb = Workbook()
        ws = wb.active
        ws.title = "系统信息,请勿修改"
        ws['A1'] = '程序识别信息,请勿修改: '
        ws['B1'] = 'USER_ID: '
        ws['C1'] = XENCRYPT(user_id)
        ws['D1'] = 'USER_NAME: '
        ws['E1'] = user_name
        ws['F1'] = 'ROLES: '
        ws['G1'] = XENCRYPT(roles)
        ws['H1'] = 'TIMESTAMP: '
        ws['I1'] = XENCRYPT(str(datetime.datetime.now()))
        tableTitle = ['术前诊断', '既往手术史', '手术一般信息', '股骨情况',
                      '软组织平衡情况', '胫骨平台截骨情况', '髌骨情况', '安装假体情况', '止血带使用情况']
        for title in tableTitle:
            ws_new = wb.create_sheet(title=title)
            ws_new['A1'] = '程序识别信息,请勿修改: '
            ws_new['A1'].font = Font(italic=True, color='AAAAAA')
            ws_new['B1'] = '数据库: '
            ws_new['B1'].font = Font(italic=True, color='AAAAAA')
            ws_new['C1'] = XENCRYPT('idm_data_tools_data')
            ws_new['C1'].font = Font(italic=True, color='AAAAAA')
            ws_new['D1'] = '表: '
            ws_new['D1'].font = Font(italic=True, color='AAAAAA')
            ws_new['E1'].font = Font(italic=True, color='AAAAAA')
            ws_new['F1'] = XENCRYPT(str(200010))
            ws_new['F1'].font = Font(italic=True, color='AAAAAA')

            ws_new['A2'] = '列名(英文)'
            ws_new['A2'].font = Font(bold=True)
            ws_new['A3'] = '列名(中文)'
            ws_new['A3'].font = Font(bold=True)
            ws_new['A4'] = '数据类型(最大长度)'
            ws_new['A4'].font = Font(bold=True)
            ws_new.column_dimensions['A'].width = 20
            # 术前诊断
            if title == '术前诊断':
                ws_new['E1'] = XENCRYPT('echart_data_pre_diagnosis')
                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'knee_replacement'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'knee_deformity'
                # 列名(中文)
                ws_new['B3'].font = Font(color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(color="BBBBBB")
                ws_new['F3'] = '膝置换'
                ws_new['G3'].font = Font(color="BBBBBB")
                ws_new['G3'] = '膝畸形'
                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(50)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(50)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(50)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(50)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(50)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(50)'
            # 既往手术史
            if title == '既往手术史':
                ws_new['E1'] = XENCRYPT('echart_data_pre_surgical_history')

                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'surgical_history'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'operation_time'
                ws_new['H2'].font = Font(bold=True, color="BBBBBB")
                ws_new['H2'] = 'puncture'
                ws_new['I2'].font = Font(bold=True, color="BBBBBB")
                ws_new['I2'] = 'small_needle_knife'
                ws_new['J2'].font = Font(bold=True, color="BBBBBB")
                ws_new['J2'] = 'arthroscopy_knee'
                ws_new['K2'].font = Font(bold=True, color="BBBBBB")
                ws_new['K2'] = 'incision'
                ws_new['L2'].font = Font(bold=True, color="BBBBBB")
                ws_new['L2'] = 'osteotomy'
                ws_new['M2'].font = Font(bold=True, color="BBBBBB")
                ws_new['M2'] = 'replacement'
                ws_new['N2'].font = Font(bold=True, color="BBBBBB")
                ws_new['N2'] = 'revision'
                ws_new['O2'].font = Font(bold=True, color="BBBBBB")
                ws_new['O2'] = 'other'
                ws_new['P2'].font = Font(bold=True, color="BBBBBB")
                ws_new['P2'] = 'surgery_history'
                ws_new['Q2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Q2'] = 'con_time'
                ws_new['R2'].font = Font(bold=True, color="BBBBBB")
                ws_new['R2'] = 'con_puncture'
                ws_new['S2'].font = Font(bold=True, color="BBBBBB")
                ws_new['S2'] = 'con_small_needle'
                ws_new['T2'].font = Font(bold=True, color="BBBBBB")
                ws_new['T2'] = 'con_arthroscopy_knee'
                ws_new['U2'].font = Font(bold=True, color="BBBBBB")
                ws_new['U2'] = 'con_incision'
                ws_new['V2'].font = Font(bold=True, color="BBBBBB")
                ws_new['V2'] = 'con_osteotomy'
                ws_new['W2'].font = Font(bold=True, color="BBBBBB")
                ws_new['W2'] = 'con_replacement'
                ws_new['X2'].font = Font(bold=True, color="BBBBBB")
                ws_new['X2'] = 'con_revision'
                ws_new['Y2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Y2'] = 'con_other'
                ws_new['Z2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Z2'] = 'limb_history'
                ws_new['AA2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AA2'] = 'limb_time'
                ws_new['AB2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AB2'] = 'fixation'
                ws_new['AC2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AC2'] = 'limb_osteotomy'
                ws_new['AD2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AD2'] = 'limb_microsurgery'
                ws_new['AE2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AE2'] = 'limb_replacement'
                ws_new['AF2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AF2'] = 'limb_revision'
                ws_new['AG2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AG2'] = 'limb_fixation'
                ws_new['AH2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AH2'] = 'limb_arthroscopic'
                ws_new['AI2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AI2'] = 'limb_orthopedics'
                ws_new['AJ2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AJ2'] = 'limb_other'
                ws_new['AK2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AK2'] = 'lumbar_history'
                ws_new['AL2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AL2'] = 'lumbar_time'
                ws_new['AM2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AM2'] = 'other_body_history'
                ws_new['AN2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AN2'] = 'other_body_name'
                ws_new['AO2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AO2'] = 'other_body_remarks'
                # 列名(中文)
                ws_new['B3'].font = Font(color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(color="BBBBBB")
                ws_new['F3'] = '患侧膝关节手术史'
                ws_new['G3'].font = Font(color="BBBBBB")
                ws_new['G3'] = '患侧膝关节手术时间'
                ws_new['H3'].font = Font(color="BBBBBB")
                ws_new['H3'] = '患侧膝关节手术名称-膝关节穿刺术'
                ws_new['I3'].font = Font(color="BBBBBB")
                ws_new['I3'] = '患侧膝关节手术名称-膝关节小针刀术'
                ws_new['J3'].font = Font(color="BBBBBB")
                ws_new['J3'] = '患侧膝关节手术名称-膝关节镜术(滑膜切除、半月板切除、交叉韧带重建、关节炎清理、游离体取出)'
                ws_new['K3'].font = Font(color="BBBBBB")
                ws_new['K3'] = '患侧膝关节手术名称-膝关节切开手术(滑膜切除、半月板切除、游离体取出)'
                ws_new['L3'].font = Font(color="BBBBBB")
                ws_new['L3'] = '患侧膝关节手术名称-膝关节截骨术(HTO、PFO、骨折内固定术)'
                ws_new['M3'].font = Font(color="BBBBBB")
                ws_new['M3'] = '患侧膝关节手术名称-膝关节置换术 '
                ws_new['N3'].font = Font(color="BBBBBB")
                ws_new['N3'] = '患侧膝关节手术名称-膝关节翻修术'
                ws_new['O3'].font = Font(color="BBBBBB")
                ws_new['O3'] = '患侧膝关节手术名称-其他'
                ws_new['P3'].font = Font(color="BBBBBB")
                ws_new['P3'] = '对侧膝关节手术史'
                ws_new['Q3'].font = Font(color="BBBBBB")
                ws_new['Q3'] = '对侧膝关节手术时间'
                ws_new['R3'].font = Font(color="BBBBBB")
                ws_new['R3'] = '对侧膝关节手术名称-膝关节穿刺术'
                ws_new['S3'].font = Font(color="BBBBBB")
                ws_new['S3'] = '对侧膝关节手术名称-膝关节小针刀术'
                ws_new['T3'].font = Font(color="BBBBBB")
                ws_new['T3'] = '对侧膝关节手术名称-膝关节镜术(滑膜切除、半月板切除、交叉韧带重建、关节炎清理、游离体取出)'
                ws_new['U3'].font = Font(color="BBBBBB")
                ws_new['U3'] = '对侧膝关节手术名称-膝关节切开手术(滑膜切除、半月板切除、游离体取出)'
                ws_new['V3'].font = Font(color="BBBBBB")
                ws_new['V3'] = '对侧膝关节手术名称-膝关节截骨术(HTO、PFO、骨折内固定术)'
                ws_new['W3'].font = Font(color="BBBBBB")
                ws_new['W3'] = '对侧膝关节手术名称-膝关节置换术'
                ws_new['X3'].font = Font(color="BBBBBB")
                ws_new['X3'] = '对侧膝关节手术名称-膝关节翻修术'
                ws_new['Y3'].font = Font(color="BBBBBB")
                ws_new['Y3'] = '对侧膝关节手术名称-其他'
                ws_new['Z3'].font = Font(color="BBBBBB")
                ws_new['Z3'] = '患侧肢体手术史'
                ws_new['AA3'].font = Font(color="BBBBBB")
                ws_new['AA3'] = '患侧肢体手术时间'
                ws_new['AB3'].font = Font(color="BBBBBB")
                ws_new['AB3'] = '患侧肢体手术名称-髋关节骨折内固定手术'
                ws_new['AC3'].font = Font(color="BBBBBB")
                ws_new['AC3'] = '患侧肢体手术名称-髋臼周围截骨术'
                ws_new['AD3'].font = Font(color="BBBBBB")
                ws_new['AD3'] = '患侧肢体手术名称-髋关节镜手术'
                ws_new['AE3'].font = Font(color="BBBBBB")
                ws_new['AE3'] = '患侧肢体手术名称-髋关节置换术'
                ws_new['AF3'].font = Font(color="BBBBBB")
                ws_new['AF3'] = '患侧肢体手术名称-髋关节翻修术'
                ws_new['AG3'].font = Font(color="BBBBBB")
                ws_new['AG3'] = '患侧肢体手术名称-踝关节骨折内固定术 '
                ws_new['AH3'].font = Font(color="BBBBBB")
                ws_new['AH3'] = '患侧肢体手术名称-踝关节镜手术'
                ws_new['AI3'].font = Font(color="BBBBBB")
                ws_new['AI3'] = '患侧肢体手术名称-踝关节矫形术'
                ws_new['AJ3'].font = Font(color="BBBBBB")
                ws_new['AJ3'] = '患侧肢体手术名称-其他'
                ws_new['AK3'].font = Font(color="BBBBBB")
                ws_new['AK3'] = '腰椎手术史'
                ws_new['AL3'].font = Font(color="BBBBBB")
                ws_new['AL3'] = '腰椎手术时间'
                ws_new['AM3'].font = Font(color="BBBBBB")
                ws_new['AM3'] = '身体其他部位手术史'
                ws_new['AN3'].font = Font(color="BBBBBB")
                ws_new['AN3'] = '身体其他部位手术名称'
                ws_new['AO3'].font = Font(color="BBBBBB")
                ws_new['AO3'] = '身体其他部位手术-备注信息'
                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(50)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(50)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(50)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(50)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(50)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(50)'
                ws_new['H4'].font = Font(color="BBBBBB")
                ws_new['H4'] = '字符型(50)'
                ws_new['I4'].font = Font(color="BBBBBB")
                ws_new['I4'] = '字符型(50)'
                ws_new['J4'].font = Font(color="BBBBBB")
                ws_new['J4'] = '字符型(50)'
                ws_new['K4'].font = Font(color="BBBBBB")
                ws_new['K4'] = '字符型(50)'
                ws_new['L4'].font = Font(color="BBBBBB")
                ws_new['L4'] = '字符型(50)'
                ws_new['M4'].font = Font(color="BBBBBB")
                ws_new['M4'] = '字符型(50)'
                ws_new['N4'].font = Font(color="BBBBBB")
                ws_new['N4'] = '字符型(50)'
                ws_new['O4'].font = Font(color="BBBBBB")
                ws_new['O4'] = '字符型(50)'
                ws_new['P4'].font = Font(color="BBBBBB")
                ws_new['P4'] = '字符型(50)'
                ws_new['Q4'].font = Font(color="BBBBBB")
                ws_new['Q4'] = '字符型(50)'
                ws_new['R4'].font = Font(color="BBBBBB")
                ws_new['R4'] = '字符型(50)'
                ws_new['S4'].font = Font(color="BBBBBB")
                ws_new['S4'] = '字符型(50)'
                ws_new['T4'].font = Font(color="BBBBBB")
                ws_new['T4'] = '字符型(50)'
                ws_new['U4'].font = Font(color="BBBBBB")
                ws_new['U4'] = '字符型(50)'
                ws_new['V4'].font = Font(color="BBBBBB")
                ws_new['V4'] = '字符型(50)'
                ws_new['W4'].font = Font(color="BBBBBB")
                ws_new['W4'] = '字符型(50)'
                ws_new['X4'].font = Font(color="BBBBBB")
                ws_new['X4'] = '字符型(50)'
                ws_new['Y4'].font = Font(color="BBBBBB")
                ws_new['Y4'] = '字符型(50)'
                ws_new['Z4'].font = Font(color="BBBBBB")
                ws_new['Z4'] = '字符型(50)'
                ws_new['AA4'].font = Font(color="BBBBBB")
                ws_new['AA4'] = '字符型(50)'
                ws_new['AB4'].font = Font(color="BBBBBB")
                ws_new['AB4'] = '字符型(50)'
                ws_new['AC4'].font = Font(color="BBBBBB")
                ws_new['AC4'] = '字符型(50)'
                ws_new['AD4'].font = Font(color="BBBBBB")
                ws_new['AD4'] = '字符型(50)'
                ws_new['AE4'].font = Font(color="BBBBBB")
                ws_new['AE4'] = '字符型(50)'
                ws_new['AF4'].font = Font(color="BBBBBB")
                ws_new['AF4'] = '字符型(50)'
                ws_new['AG4'].font = Font(color="BBBBBB")
                ws_new['AG4'] = '字符型(50)'
                ws_new['AH4'].font = Font(color="BBBBBB")
                ws_new['AH4'] = '字符型(50)'
                ws_new['AI4'].font = Font(color="BBBBBB")
                ws_new['AI4'] = '字符型(50)'
                ws_new['AJ4'].font = Font(color="BBBBBB")
                ws_new['AJ4'] = '字符型(50)'
                ws_new['AK4'].font = Font(color="BBBBBB")
                ws_new['AK4'] = '字符型(50)'
                ws_new['AL4'].font = Font(color="BBBBBB")
                ws_new['AL4'] = '字符型(50)'
                ws_new['AM4'].font = Font(color="BBBBBB")
                ws_new['AM4'] = '字符型(50)'
                ws_new['AN4'].font = Font(color="BBBBBB")
                ws_new['AN4'] = '字符型(50)'
                ws_new['AO4'].font = Font(color="BBBBBB")
                ws_new['AO4'] = '字符型(200)'
            # 手术一般信息
            if title == '手术一般信息':
                ws_new['E1'] = XENCRYPT('echart_data_surgery_info')

                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'surgical_site'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'surgical_time'
                ws_new['H2'].font = Font(bold=True, color="BBBBBB")
                ws_new['H2'] = 'surgical_hospital'
                ws_new['I2'].font = Font(bold=True, color="BBBBBB")
                ws_new['I2'] = 'chief_surgeon'
                ws_new['J2'].font = Font(bold=True, color="BBBBBB")
                ws_new['J2'] = 'relaxation_knee'
                ws_new['K2'].font = Font(bold=True, color="BBBBBB")
                ws_new['K2'] = 'over_extension'
                ws_new['L2'].font = Font(bold=True, color="BBBBBB")
                ws_new['L2'] = 'contracture_degree'
                ws_new['M2'].font = Font(bold=True, color="BBBBBB")
                ws_new['M2'] = 'access_way'
                ws_new['N2'].font = Font(bold=True, color="BBBBBB")
                ws_new['N2'] = 'loose_sleeve'
                ws_new['O2'].font = Font(bold=True, color="BBBBBB")
                ws_new['O2'] = 'joint_manufacturer'
                ws_new['P2'].font = Font(bold=True, color="BBBBBB")
                ws_new['P2'] = 'before_systolic_pressure'
                ws_new['Q2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Q2'] = 'before_diastolic_pressure'
                ws_new['R2'].font = Font(bold=True, color="BBBBBB")
                ws_new['R2'] = 'after_systolic_pressure'
                ws_new['S2'].font = Font(bold=True, color="BBBBBB")
                ws_new['S2'] = 'after_diastolic_pressure'
                ws_new['T2'].font = Font(bold=True, color="BBBBBB")
                ws_new['T2'] = 'heart_rate'
                ws_new['U2'].font = Font(bold=True, color="BBBBBB")
                ws_new['U2'] = 'blood_oxygen'
                ws_new['V2'].font = Font(bold=True, color="BBBBBB")
                ws_new['V2'] = 'date_operation'
                ws_new['W2'].font = Font(bold=True, color="BBBBBB")
                ws_new['W2'] = 'pre_systolic_pressure'
                ws_new['X2'].font = Font(bold=True, color="BBBBBB")
                ws_new['X2'] = 'pre_diastolic_pressure'
                ws_new['Y2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Y2'] = 'operation_duration'
                ws_new['Z2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Z2'] = 'bleeding_volume'
                ws_new['AA2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AA2'] = 'blood_transfusion'
                ws_new['AB2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AB2'] = 'breathing'
                # 列名(中文)
                ws_new['B3'].font = Font(color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(color="BBBBBB")
                ws_new['F3'] = '手术部位'
                ws_new['G3'].font = Font(color="BBBBBB")
                ws_new['G3'] = '手术时间'
                ws_new['H3'].font = Font(color="BBBBBB")
                ws_new['H3'] = '手术医院'
                ws_new['I3'].font = Font(color="BBBBBB")
                ws_new['I3'] = '主刀医生'
                ws_new['J3'].font = Font(color="BBBBBB")
                ws_new['J3'] = '麻醉后膝关节松弛度'
                ws_new['K3'].font = Font(color="BBBBBB")
                ws_new['K3'] = '过伸度数'
                ws_new['L3'].font = Font(color="BBBBBB")
                ws_new['L3'] = '屈曲挛缩度数'
                ws_new['M3'].font = Font(color="BBBBBB")
                ws_new['M3'] = '入路方式'
                ws_new['N3'].font = Font(color="BBBBBB")
                ws_new['N3'] = '袖套松解'
                ws_new['O3'].font = Font(color="BBBBBB")
                ws_new['O3'] = '关节厂商'
                ws_new['P3'].font = Font(color="BBBBBB")
                ws_new['P3'] = '麻醉前-收缩压(mmHg)'
                ws_new['Q3'].font = Font(color="BBBBBB")
                ws_new['Q3'] = '麻醉前-舒张压(mmHg)'
                ws_new['R3'].font = Font(color="BBBBBB")
                ws_new['R3'] = '麻醉后-收缩压(mmHg)'
                ws_new['S3'].font = Font(color="BBBBBB")
                ws_new['S3'] = '麻醉后-舒张压(mmHg)'
                ws_new['T3'].font = Font(color="BBBBBB")
                ws_new['T3'] = '心率(次/分)'
                ws_new['U3'].font = Font(color="BBBBBB")
                ws_new['U3'] = '血氧(%)'
                ws_new['V3'].font = Font(color="BBBBBB")
                ws_new['V3'] = '手术日期'
                ws_new['W3'].font = Font(color="BBBBBB")
                ws_new['W3'] = '术前血压-收缩压(mmHg)'
                ws_new['X3'].font = Font(color="BBBBBB")
                ws_new['X3'] = '术前血压-舒张压(mmHg)'
                ws_new['Y3'].font = Font(color="BBBBBB")
                ws_new['Y3'] = '手术时长(min)'
                ws_new['Z3'].font = Font(color="BBBBBB")
                ws_new['Z3'] = '出血量(ml)'
                ws_new['AA3'].font = Font(color="BBBBBB")
                ws_new['AA3'] = '输血情况'
                ws_new['AB3'].font = Font(color="BBBBBB")
                ws_new['AB3'] = '呼吸(次/分)'
                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(50)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(50)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(50)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(50)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(50)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(50)'
                ws_new['H4'].font = Font(color="BBBBBB")
                ws_new['H4'] = '字符型(50)'
                ws_new['I4'].font = Font(color="BBBBBB")
                ws_new['I4'] = '字符型(50)'
                ws_new['J4'].font = Font(color="BBBBBB")
                ws_new['J4'] = '字符型(50)'
                ws_new['K4'].font = Font(color="BBBBBB")
                ws_new['K4'] = '字符型(50)'
                ws_new['L4'].font = Font(color="BBBBBB")
                ws_new['L4'] = '字符型(50)'
                ws_new['M4'].font = Font(color="BBBBBB")
                ws_new['M4'] = '字符型(50)'
                ws_new['N4'].font = Font(color="BBBBBB")
                ws_new['N4'] = '字符型(50)'
                ws_new['O4'].font = Font(color="BBBBBB")
                ws_new['O4'] = '字符型(50)'
                ws_new['P4'].font = Font(color="BBBBBB")
                ws_new['P4'] = '字符型(50)'
                ws_new['Q4'].font = Font(color="BBBBBB")
                ws_new['Q4'] = '字符型(50)'
                ws_new['R4'].font = Font(color="BBBBBB")
                ws_new['R4'] = '字符型(50)'
                ws_new['S4'].font = Font(color="BBBBBB")
                ws_new['S4'] = '字符型(50)'
                ws_new['T4'].font = Font(color="BBBBBB")
                ws_new['T4'] = '字符型(50)'
                ws_new['U4'].font = Font(color="BBBBBB")
                ws_new['U4'] = '字符型(50)'
                ws_new['V4'].font = Font(color="BBBBBB")
                ws_new['V4'] = '字符型(50)'
                ws_new['W4'].font = Font(color="BBBBBB")
                ws_new['W4'] = '字符型(50)'
                ws_new['X4'].font = Font(color="BBBBBB")
                ws_new['X4'] = '字符型(50)'
                ws_new['Y4'].font = Font(color="BBBBBB")
                ws_new['Y4'] = '字符型(50)'
                ws_new['Z4'].font = Font(color="BBBBBB")
                ws_new['Z4'] = '字符型(50)'
                ws_new['AA4'].font = Font(color="BBBBBB")
                ws_new['AA4'] = '字符型(50)'
                ws_new['AB4'].font = Font(color="BBBBBB")
                ws_new['AB4'] = '字符型(50)'
            # 股骨情况
            if title == '股骨情况':
                ws_new['E1'] = XENCRYPT('echart_data_femur_condition')

                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'medullary_position'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'eversion_degree'
                ws_new['H2'].font = Font(bold=True, color="BBBBBB")
                ws_new['H2'] = 'osteotomy_thickness'
                ws_new['I2'].font = Font(bold=True, color="BBBBBB")
                ws_new['I2'] = 'add_osteotomy'
                ws_new['J2'].font = Font(bold=True, color="BBBBBB")
                ws_new['J2'] = 'reduced_osteotomy'
                ws_new['K2'].font = Font(bold=True, color="BBBBBB")
                ws_new['K2'] = 'distal_osteotomy'
                ws_new['L2'].font = Font(bold=True, color="BBBBBB")
                ws_new['L2'] = 'model_reference'
                ws_new['M2'].font = Font(bold=True, color="BBBBBB")
                ws_new['M2'] = 'prosthesis_model'
                ws_new['N2'].font = Font(bold=True, color="BBBBBB")
                ws_new['N2'] = 'actual_femoral'
                ws_new['O2'].font = Font(bold=True, color="BBBBBB")
                ws_new['O2'] = 'special_femoral'
                ws_new['P2'].font = Font(bold=True, color="BBBBBB")
                ws_new['P2'] = 'extension_rod'
                ws_new['Q2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Q2'] = 'forward_backward'
                ws_new['R2'].font = Font(bold=True, color="BBBBBB")
                ws_new['R2'] = 'forward_distance'
                ws_new['S2'].font = Font(bold=True, color="BBBBBB")
                ws_new['S2'] = 'backward_distance'
                ws_new['T2'].font = Font(bold=True, color="BBBBBB")
                ws_new['T2'] = 'remarks'
                ws_new['U2'].font = Font(bold=True, color="BBBBBB")
                ws_new['U2'] = 'notching'
                ws_new['V2'].font = Font(bold=True, color="BBBBBB")
                ws_new['V2'] = 'have_notching'
                ws_new['W2'].font = Font(bold=True, color="BBBBBB")
                ws_new['W2'] = 'external_degree'
                ws_new['X2'].font = Font(bold=True, color="BBBBBB")
                ws_new['X2'] = 'whiteside'
                ws_new['Y2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Y2'] = 'posterior_condyle_line'
                ws_new['Z2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Z2'] = 'condylar_axis'
                ws_new['AA2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AA2'] = 'special_remarks'

                # 列名(中文)
                ws_new['B3'].font = Font(color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(color="BBBBBB")
                ws_new['F3'] = 'PCL'
                ws_new['G3'].font = Font(color="BBBBBB")
                ws_new['G3'] = '外翻度数'
                ws_new['H3'].font = Font(color="BBBBBB")
                ws_new['H3'] = '远端截骨厚度'
                ws_new['I3'].font = Font(color="BBBBBB")
                ws_new['I3'] = '增加截骨(mm)'
                ws_new['J3'].font = Font(color="BBBBBB")
                ws_new['J3'] = '减少截骨(mm)'
                ws_new['K3'].font = Font(color="BBBBBB")
                ws_new['K3'] = '远端截骨情况'
                ws_new['L3'].font = Font(color="BBBBBB")
                ws_new['L3'] = '髁型号参考'
                ws_new['M3'].font = Font(color="BBBBBB")
                ws_new['M3'] = '首次测量髁假体型号'
                ws_new['N3'].font = Font(color="BBBBBB")
                ws_new['N3'] = '实际使用股骨髁型号'
                ws_new['O3'].font = Font(color="BBBBBB")
                ws_new['O3'] = '特殊股骨髁'
                ws_new['P3'].font = Font(color="BBBBBB")
                ws_new['P3'] = '髁延长杆'
                ws_new['Q3'].font = Font(color="BBBBBB")
                ws_new['Q3'] = '股骨髁型号前移后移'
                ws_new['R3'].font = Font(color="BBBBBB")
                ws_new['R3'] = '前移距离(mm)'
                ws_new['S3'].font = Font(color="BBBBBB")
                ws_new['S3'] = '后移距离(mm)'
                ws_new['T3'].font = Font(color="BBBBBB")
                ws_new['T3'] = '前移、后移-备注信息'
                ws_new['U3'].font = Font(color="BBBBBB")
                ws_new['U3'] = '有无notching'
                ws_new['V3'].font = Font(color="BBBBBB")
                ws_new['V3'] = '有notching'
                ws_new['W3'].font = Font(color="BBBBBB")
                ws_new['W3'] = '外旋度数(°)'
                ws_new['X3'].font = Font(color="BBBBBB")
                ws_new['X3'] = '外旋参考线-whiteside线'
                ws_new['Y3'].font = Font(color="BBBBBB")
                ws_new['Y3'] = '外旋参考线-后髁连线'
                ws_new['Z3'].font = Font(color="BBBBBB")
                ws_new['Z3'] = '外旋参考线-通髁轴'
                ws_new['AA3'].font = Font(color="BBBBBB")
                ws_new['AA3'] = '股骨特殊情况备注'

                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(50)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(50)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(50)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(50)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(50)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(50)'
                ws_new['H4'].font = Font(color="BBBBBB")
                ws_new['H4'] = '字符型(50)'
                ws_new['I4'].font = Font(color="BBBBBB")
                ws_new['I4'] = '字符型(50)'
                ws_new['J4'].font = Font(color="BBBBBB")
                ws_new['J4'] = '字符型(50)'
                ws_new['K4'].font = Font(color="BBBBBB")
                ws_new['K4'] = '字符型(50)'
                ws_new['L4'].font = Font(color="BBBBBB")
                ws_new['L4'] = '字符型(50)'
                ws_new['M4'].font = Font(color="BBBBBB")
                ws_new['M4'] = '字符型(50)'
                ws_new['N4'].font = Font(color="BBBBBB")
                ws_new['N4'] = '字符型(50)'
                ws_new['O4'].font = Font(color="BBBBBB")
                ws_new['O4'] = '字符型(50)'
                ws_new['P4'].font = Font(color="BBBBBB")
                ws_new['P4'] = '字符型(50)'
                ws_new['Q4'].font = Font(color="BBBBBB")
                ws_new['Q4'] = '字符型(50)'
                ws_new['R4'].font = Font(color="BBBBBB")
                ws_new['R4'] = '字符型(50)'
                ws_new['S4'].font = Font(color="BBBBBB")
                ws_new['S4'] = '字符型(50)'
                ws_new['T4'].font = Font(color="BBBBBB")
                ws_new['T4'] = '字符型(150)'
                ws_new['U4'].font = Font(color="BBBBBB")
                ws_new['U4'] = '字符型(50)'
                ws_new['V4'].font = Font(color="BBBBBB")
                ws_new['V4'] = '字符型(50)'
                ws_new['W4'].font = Font(color="BBBBBB")
                ws_new['W4'] = '字符型(50)'
                ws_new['X4'].font = Font(color="BBBBBB")
                ws_new['X4'] = '字符型(50)'
                ws_new['Y4'].font = Font(color="BBBBBB")
                ws_new['Y4'] = '字符型(50)'
                ws_new['Z4'].font = Font(color="BBBBBB")
                ws_new['Z4'] = '字符型(50)'
                ws_new['AA4'].font = Font(color="BBBBBB")
                ws_new['AA4'] = '字符型(150)'
             # 软组织平衡情况
            if title == '软组织平衡情况':
                ws_new['E1'] = XENCRYPT('echart_data_soft_tissue_balance')

                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'pcl'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'cr_pcl'
                ws_new['H2'].font = Font(bold=True, color="BBBBBB")
                ws_new['H2'] = 'pcl_osteotomy'
                ws_new['I2'].font = Font(bold=True, color="BBBBBB")
                ws_new['I2'] = 'cr_quality_absent'
                ws_new['J2'].font = Font(bold=True, color="BBBBBB")
                ws_new['J2'] = 'cr_good'
                ws_new['K2'].font = Font(bold=True, color="BBBBBB")
                ws_new['K2'] = 'femoral_condyle'
                ws_new['L2'].font = Font(bold=True, color="BBBBBB")
                ws_new['L2'] = 'platform_osteotomy'
                ws_new['M2'].font = Font(bold=True, color="BBBBBB")
                ws_new['M2'] = 'point_tear'
                ws_new['N2'].font = Font(bold=True, color="BBBBBB")
                ws_new['N2'] = 'osteoporotic_avulsion'
                ws_new['O2'].font = Font(bold=True, color="BBBBBB")
                ws_new['O2'] = 'bone_preservation'
                ws_new['P2'].font = Font(bold=True, color="BBBBBB")
                ws_new['P2'] = 'other'
                ws_new['Q2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Q2'] = 'dislocation_subluxation'
                ws_new['R2'].font = Font(bold=True, color="BBBBBB")
                ws_new['R2'] = 'mcl'
                ws_new['S2'].font = Font(bold=True, color="BBBBBB")
                ws_new['S2'] = 'loose_sleeves'
                ws_new['T2'].font = Font(bold=True, color="BBBBBB")
                ws_new['T2'] = 'excrescence'
                ws_new['U2'].font = Font(bold=True, color="BBBBBB")
                ws_new['U2'] = 'meniscectomy'
                ws_new['V2'].font = Font(bold=True, color="BBBBBB")
                ws_new['V2'] = 'medial_osteotomy'
                ws_new['W2'].font = Font(bold=True, color="BBBBBB")
                ws_new['W2'] = 'mcl_other'
                ws_new['X2'].font = Font(bold=True, color="BBBBBB")
                ws_new['X2'] = 'repair'
                ws_new['Y2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Y2'] = 'popliteal_tendon'
                ws_new['Z2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Z2'] = 'popliteal_tendon_repair'
                ws_new['AA2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AA2'] = 'itb_iliotibial_tract'
                ws_new['aB2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aB2'] = 'before_stretch'
                ws_new['aC2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aC2'] = 'after_stretch'
                ws_new['aD2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aD2'] = 'condylar_removal'
                ws_new['aE2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aE2'] = 'surface_preservation'
                ws_new['aF2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aF2'] = 'crypt_cleaning'
                ws_new['aG2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aG2'] = 'release_1'
                ws_new['aH2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aH2'] = 'subperiosteal_lysis'
                ws_new['aI2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aI2'] = 'excited_part'
                ws_new['aJ2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aJ2'] = 'joint_stretch'
                ws_new['aK2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aK2'] = 'release_excited_part'
                ws_new['aL2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aL2'] = 'posterior_release'
                ws_new['aM2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aM2'] = 'conventional_release'
                ws_new['aN2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aN2'] = 'better_knee_joint'
                ws_new['aO2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aO2'] = 'varus_deformity'
                ws_new['aP2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aP2'] = 'cocktail_injection'
                ws_new['aQ2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aQ2'] = 'injection_site'
                ws_new['aR2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aR2'] = 'complication'
                ws_new['aS2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aS2'] = 'handling'
                ws_new['aT2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aT2'] = 'remarks_special'
                ws_new['aU2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aU2'] = 'internal_posterior'
                ws_new['aV2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aV2'] = 'internal_con_release'
                ws_new['aW2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aW2'] = 'internal_better'
                ws_new['aX2'].font = Font(bold=True, color="BBBBBB")
                ws_new['aX2'] = 'internal_varus'
                ws_new['AY2'].font = Font(bold=True, color="BBBBBB")
                ws_new['AY2'] = 'cocktail_formula'
                # 列名(中文)
                ws_new['B3'].font = Font(bold=True, color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(bold=True, color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(bold=True, color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(bold=True, color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(bold=True, color="BBBBBB")
                ws_new['F3'] = 'PCL'
                ws_new['G3'].font = Font(bold=True, color="BBBBBB")
                ws_new['G3'] = 'CR关节-PCL情况'
                ws_new['H3'].font = Font(bold=True, color="BBBBBB")
                ws_new['H3'] = 'PCL截骨损伤'
                ws_new['I3'].font = Font(bold=True, color="BBBBBB")
                ws_new['I3'] = 'CR关节-质量不佳或缺如'
                ws_new['J3'].font = Font(bold=True, color="BBBBBB")
                ws_new['J3'] = 'CR关节-良好'
                ws_new['K3'].font = Font(bold=True, color="BBBBBB")
                ws_new['K3'] = '截骨损伤类型-股骨后髁截骨损伤'
                ws_new['L3'].font = Font(bold=True, color="BBBBBB")
                ws_new['L3'] = '截骨损伤类型-平台截骨损伤'
                ws_new['M3'].font = Font(bold=True, color="BBBBBB")
                ws_new['M3'] = '截骨损伤类型-屈伸平衡不良,止点撕脱'
                ws_new['N3'].font = Font(bold=True, color="BBBBBB")
                ws_new['N3'] = '截骨损伤类型-骨质疏松止点撕脱'
                ws_new['O3'].font = Font(bold=True, color="BBBBBB")
                ws_new['O3'] = '截骨损伤类型-保留骨岛操作损伤'
                ws_new['P3'].font = Font(bold=True, color="BBBBBB")
                ws_new['P3'] = '截骨损伤类型-其他'
                ws_new['Q3'].font = Font(bold=True, color="BBBBBB")
                ws_new['Q3'] = 'CR关节PCL情况-屈曲垫片脱位/半脱位'
                ws_new['R3'].font = Font(bold=True, color="BBBBBB")
                ws_new['R3'] = 'MCL'
                ws_new['S3'].font = Font(bold=True, color="BBBBBB")
                ws_new['S3'] = 'MCL损伤类型-袖套松解'
                ws_new['T3'].font = Font(bold=True, color="BBBBBB")
                ws_new['T3'] = 'MCL损伤类型-股骨髁内侧骨赘切除'
                ws_new['U3'].font = Font(bold=True, color="BBBBBB")
                ws_new['U3'] = 'MCL损伤类型-半月板切除'
                ws_new['V3'].font = Font(bold=True, color="BBBBBB")
                ws_new['V3'] = 'MCL损伤类型-胫骨内侧截骨'
                ws_new['W3'].font = Font(bold=True, color="BBBBBB")
                ws_new['W3'] = 'MCL损伤类型-其他'
                ws_new['X3'].font = Font(bold=True, color="BBBBBB")
                ws_new['X3'] = 'MCL损伤修复情况'
                ws_new['Y3'].font = Font(bold=True, color="BBBBBB")
                ws_new['Y3'] = '腘肌腱'
                ws_new['Z3'].font = Font(bold=True, color="BBBBBB")
                ws_new['Z3'] = '腘肌腱修补情况'
                ws_new['AA3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AA3'] = '髂胫束ITB'
                ws_new['AB3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AB3'] = '截骨前拉花松解'
                ws_new['AC3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AC3'] = '截骨后拉花松解'
                ws_new['AD3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AD3'] = '后关节囊-内外后髁骨去除'
                ws_new['AE3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AE3'] = '后关节囊-后髁骨面保留(cm)'
                ws_new['AF3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AF3'] = '后关节囊-内外后隐窝清理'
                ws_new['AG3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AG3'] = '后关节囊-松解'
                ws_new['AH3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AH3'] = '屈曲位松解-骨膜下松解'
                ws_new['AI3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AI3'] = '屈曲位松解-切除部分关节囊'
                ws_new['AJ3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AJ3'] = '伸直位松解-关节囊拉花松解'
                ws_new['AK3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AK3'] = '伸直位松解-切除部分关节囊'
                ws_new['AL3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AL3'] = '后关节囊-胫骨平台内后角松解'
                ws_new['AM3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AM3'] = '胫骨平台内后角松解-常规松解'
                ws_new['AN3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AN3'] = '胫骨平台内后角松解-更好的伸直膝关节 '
                ws_new['AO3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AO3'] = '胫骨平台内后角松解-矫正伸直位内翻畸形'
                ws_new['AP3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AP3'] = '鸡尾酒注射'
                ws_new['AQ3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AQ3'] = '鸡尾酒注射部位'
                ws_new['AR3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AR3'] = '鸡尾酒注射并发症'
                ws_new['AS3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AS3'] = '鸡尾酒注射并发症处理情况'
                ws_new['AT3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AT3'] = '鸡尾酒注射并发症特殊情况备注'
                ws_new['AU3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AU3'] = '后关节囊-内后角松解'
                ws_new['AV3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AV3'] = '内后角松解-常规松解'
                ws_new['AW3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AW3'] = '内后角松解-更好的伸直膝关节'
                ws_new['AX3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AX3'] = '内后角松解-矫正伸直位内翻畸形'
                ws_new['AY3'].font = Font(bold=True, color="BBBBBB")
                ws_new['AY3'] = '鸡尾酒配方'
                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(20)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(20)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(10)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(6)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(20)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(20)'
                ws_new['H4'].font = Font(color="BBBBBB")
                ws_new['H4'] = '字符型(10)'
                ws_new['I4'].font = Font(color="BBBBBB")
                ws_new['I4'] = '字符型(20)'
                ws_new['J4'].font = Font(color="BBBBBB")
                ws_new['J4'] = '字符型(20)'
                ws_new['K4'].font = Font(color="BBBBBB")
                ws_new['K4'] = '字符型(20)'
                ws_new['L4'].font = Font(color="BBBBBB")
                ws_new['L4'] = '字符型(10)'
                ws_new['M4'].font = Font(color="BBBBBB")
                ws_new['M4'] = '字符型(10)'
                ws_new['N4'].font = Font(color="BBBBBB")
                ws_new['N4'] = '字符型(10)'
                ws_new['O4'].font = Font(color="BBBBBB")
                ws_new['O4'] = '字符型(10)'
                ws_new['P4'].font = Font(color="BBBBBB")
                ws_new['P4'] = '字符型(10)'
                ws_new['Q4'].font = Font(color="BBBBBB")
                ws_new['Q4'] = '字符型(10)'
                ws_new['R4'].font = Font(color="BBBBBB")
                ws_new['R4'] = '字符型(20)'
                ws_new['S4'].font = Font(color="BBBBBB")
                ws_new['S4'] = '字符型(20)'
                ws_new['T4'].font = Font(color="BBBBBB")
                ws_new['T4'] = '字符型(20)'
                ws_new['U4'].font = Font(color="BBBBBB")
                ws_new['U4'] = '字符型(20)'
                ws_new['V4'].font = Font(color="BBBBBB")
                ws_new['V4'] = '字符型(20)'
                ws_new['W4'].font = Font(color="BBBBBB")
                ws_new['W4'] = '字符型(20)'
                ws_new['X4'].font = Font(color="BBBBBB")
                ws_new['X4'] = '字符型(20)'
                ws_new['Y4'].font = Font(color="BBBBBB")
                ws_new['Y4'] = '字符型(20)'
                ws_new['Z4'].font = Font(color="BBBBBB")
                ws_new['Z4'] = '字符型(20)'
                ws_new['AA4'].font = Font(color="BBBBBB")
                ws_new['AA4'] = '字符型(20)'
                ws_new['AB4'].font = Font(color="BBBBBB")
                ws_new['AB4'] = '字符型(20)'
                ws_new['AC4'].font = Font(color="BBBBBB")
                ws_new['AC4'] = '字符型(20)'
                ws_new['AD4'].font = Font(color="BBBBBB")
                ws_new['AD4'] = '字符型(20)'
                ws_new['AE4'].font = Font(color="BBBBBB")
                ws_new['AE4'] = '字符型(20)'
                ws_new['AF4'].font = Font(color="BBBBBB")
                ws_new['AF4'] = '字符型(10)'
                ws_new['AG4'].font = Font(color="BBBBBB")
                ws_new['AG4'] = '字符型(20)'
                ws_new['AH4'].font = Font(color="BBBBBB")
                ws_new['AH4'] = '字符型(20)'
                ws_new['AI4'].font = Font(color="BBBBBB")
                ws_new['AI4'] = '字符型(4)'
                ws_new['AJ4'].font = Font(color="BBBBBB")
                ws_new['AJ4'] = '字符型(4)'
                ws_new['AK4'].font = Font(color="BBBBBB")
                ws_new['AK4'] = '字符型(4)'
                ws_new['AL4'].font = Font(color="BBBBBB")
                ws_new['AL4'] = '字符型(10)'
                ws_new['AM4'].font = Font(color="BBBBBB")
                ws_new['AM4'] = '字符型(4)'
                ws_new['AN4'].font = Font(color="BBBBBB")
                ws_new['AN4'] = '字符型(4)'
                ws_new['AO4'].font = Font(color="BBBBBB")
                ws_new['AO4'] = '字符型(4)'
                ws_new['AP4'].font = Font(color="BBBBBB")
                ws_new['AP4'] = '字符型(100)'
                ws_new['AQ4'].font = Font(color="BBBBBB")
                ws_new['AQ4'] = '字符型(20)'
                ws_new['AR4'].font = Font(color="BBBBBB")
                ws_new['AR4'] = '字符型(10)'
                ws_new['AS4'].font = Font(color="BBBBBB")
                ws_new['AS4'] = '字符型(10)'
                ws_new['AT4'].font = Font(color="BBBBBB")
                ws_new['AT4'] = '字符型(100)'
                ws_new['AU4'].font = Font(color="BBBBBB")
                ws_new['AU4'] = '字符型(10)'
                ws_new['AV4'].font = Font(color="BBBBBB")
                ws_new['AV4'] = '字符型(4)'
                ws_new['AW4'].font = Font(color="BBBBBB")
                ws_new['AW4'] = '字符型(4)'
                ws_new['AX4'].font = Font(color="BBBBBB")
                ws_new['AX4'] = '字符型(4)'
                ws_new['AY4'].font = Font(color="BBBBBB")
                ws_new['AY4'] = '字符型(100)'
            # 胫骨平台截骨情况
            if title == '胫骨平台截骨情况':
                ws_new['E1'] = XENCRYPT('echart_data_tibial_plateau')

                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'platform_model'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'platform_extension'
                ws_new['H2'].font = Font(bold=True, color="BBBBBB")
                ws_new['H2'] = 'thickness'
                ws_new['I2'].font = Font(bold=True, color="BBBBBB")
                ws_new['I2'] = 'type'
                ws_new['J2'].font = Font(bold=True, color="BBBBBB")
                ws_new['J2'] = 'joint_straightness'
                ws_new['K2'].font = Font(bold=True, color="BBBBBB")
                ws_new['K2'] = 'buckling_stability'
                ws_new['L2'].font = Font(bold=True, color="BBBBBB")
                ws_new['L2'] = 'relaxation_degree'
                ws_new['M2'].font = Font(bold=True, color="BBBBBB")
                ws_new['M2'] = 'buckling_degree'
                ws_new['N2'].font = Font(bold=True, color="BBBBBB")
                ws_new['N2'] = 'inside_outside'
                ws_new['O2'].font = Font(bold=True, color="BBBBBB")
                ws_new['O2'] = 'prosthesis_rotation'
                ws_new['P2'].font = Font(bold=True, color="BBBBBB")
                ws_new['P2'] = 'backward_degrees'
                ws_new['Q2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Q2'] = 'osteotomy_thickness'
                ws_new['R2'].font = Font(bold=True, color="BBBBBB")
                ws_new['R2'] = 'increase_osteotomy'
                ws_new['S2'].font = Font(bold=True, color="BBBBBB")
                ws_new['S2'] = 'reduce_osteotomy'
                ws_new['T2'].font = Font(bold=True, color="BBBBBB")
                ws_new['T2'] = 'tubercle_tibia'
                ws_new['U2'].font = Font(bold=True, color="BBBBBB")
                ws_new['U2'] = 'special_tibia'
                ws_new['V2'].font = Font(bold=True, color="BBBBBB")
                ws_new['V2'] = 'bone_defect'
                ws_new['W2'].font = Font(bold=True, color="BBBBBB")
                ws_new['W2'] = 'special_remarks'
                ws_new['X2'].font = Font(bold=True, color="BBBBBB")
                ws_new['X2'] = 'inside_out'
                # 列名(中文)
                ws_new['B3'].font = Font(color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(color="BBBBBB")
                ws_new['F3'] = '平台型号'
                ws_new['G3'].font = Font(color="BBBBBB")
                ws_new['G3'] = '平台延长杆'
                ws_new['H3'].font = Font(color="BBBBBB")
                ws_new['H3'] = '垫片厚度(mm)'
                ws_new['I3'].font = Font(color="BBBBBB")
                ws_new['I3'] = '垫片类型'
                ws_new['J3'].font = Font(color="BBBBBB")
                ws_new['J3'] = '关节伸直情况'
                ws_new['K3'].font = Font(color="BBBBBB")
                ws_new['K3'] = '屈曲稳定性'
                ws_new['L3'].font = Font(color="BBBBBB")
                ws_new['L3'] = '明显松弛度数'
                ws_new['M3'].font = Font(color="BBBBBB")
                ws_new['M3'] = '明显屈曲度数'
                ws_new['N3'].font = Font(color="BBBBBB")
                ws_new['N3'] = '力线-内外翻'
                ws_new['O3'].font = Font(color="BBBBBB")
                ws_new['O3'] = '内/外翻度数(°)'
                ws_new['P3'].font = Font(color="BBBBBB")
                ws_new['P3'] = '力线-假体旋转'
                ws_new['Q3'].font = Font(color="BBBBBB")
                ws_new['Q3'] = '力线-后倾度数'
                ws_new['R3'].font = Font(color="BBBBBB")
                ws_new['R3'] = '截骨厚度'
                ws_new['S3'].font = Font(color="BBBBBB")
                ws_new['S3'] = '增加截骨'
                ws_new['T3'].font = Font(color="BBBBBB")
                ws_new['T3'] = '减少截骨'
                ws_new['U3'].font = Font(color="BBBBBB")
                ws_new['U3'] = '胫骨结节'
                ws_new['V3'].font = Font(color="BBBBBB")
                ws_new['V3'] = '胫骨结节特殊情况'
                ws_new['W3'].font = Font(color="BBBBBB")
                ws_new['W3'] = '骨缺损情况'
                ws_new['X3'].font = Font(color="BBBBBB")
                ws_new['X3'] = '胫骨特殊情况备注'
                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(50)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(50)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(50)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(50)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(50)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(50)'
                ws_new['H4'].font = Font(color="BBBBBB")
                ws_new['H4'] = '字符型(50)'
                ws_new['I4'].font = Font(color="BBBBBB")
                ws_new['I4'] = '字符型(50)'
                ws_new['J4'].font = Font(color="BBBBBB")
                ws_new['J4'] = '字符型(50)'
                ws_new['K4'].font = Font(color="BBBBBB")
                ws_new['K4'] = '字符型(50)'
                ws_new['L4'].font = Font(color="BBBBBB")
                ws_new['L4'] = '字符型(50)'
                ws_new['M4'].font = Font(color="BBBBBB")
                ws_new['M4'] = '字符型(50)'
                ws_new['N4'].font = Font(color="BBBBBB")
                ws_new['N4'] = '字符型(50)'
                ws_new['O4'].font = Font(color="BBBBBB")
                ws_new['O4'] = '字符型(50)'
                ws_new['P4'].font = Font(color="BBBBBB")
                ws_new['P4'] = '字符型(50)'
                ws_new['Q4'].font = Font(color="BBBBBB")
                ws_new['Q4'] = '字符型(50)'
                ws_new['R4'].font = Font(color="BBBBBB")
                ws_new['R4'] = '字符型(100)'
                ws_new['S4'].font = Font(color="BBBBBB")
                ws_new['S4'] = '字符型(50)'
                ws_new['T4'].font = Font(color="BBBBBB")
                ws_new['T4'] = '字符型(50)'
                ws_new['U4'].font = Font(color="BBBBBB")
                ws_new['U4'] = '字符型(50)'
                ws_new['V4'].font = Font(color="BBBBBB")
                ws_new['V4'] = '字符型(50)'
                ws_new['W4'].font = Font(color="BBBBBB")
                ws_new['W4'] = '字符型(50)'
                ws_new['X4'].font = Font(color="BBBBBB")
                ws_new['X4'] = '字符型(150)'
             # 髌骨情况
            if title == '髌骨情况':
                ws_new['E1'] = XENCRYPT('echart_data_patella_condition')

                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'patella_replace'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'no_patella_replace'
                ws_new['H2'].font = Font(bold=True, color="BBBBBB")
                ws_new['H2'] = 'original_thickness'
                ws_new['I2'].font = Font(bold=True, color="BBBBBB")
                ws_new['I2'] = 'retained_thickness'
                ws_new['J2'].font = Font(bold=True, color="BBBBBB")
                ws_new['J2'] = 'patella_size'
                ws_new['K2'].font = Font(bold=True, color="BBBBBB")
                ws_new['K2'] = 'patella_placement'
                ws_new['L2'].font = Font(bold=True, color="BBBBBB")
                ws_new['L2'] = 'release_lateral'
                ws_new['M2'].font = Font(bold=True, color="BBBBBB")
                ws_new['M2'] = 'snapping_bouncing'
                ws_new['N2'].font = Font(bold=True, color="BBBBBB")
                ws_new['N2'] = 'remarks_special_patella'

                # 列名(中文)
                ws_new['B3'].font = Font(color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(color="BBBBBB")
                ws_new['F3'] = '置换髌骨情况'
                ws_new['G3'].font = Font(color="BBBBBB")
                ws_new['G3'] = '不置换髌骨'
                ws_new['H3'].font = Font(color="BBBBBB")
                ws_new['H3'] = '髌骨原始厚度(最厚部分mm)'
                ws_new['I3'].font = Font(color="BBBBBB")
                ws_new['I3'] = '骨床保留厚度(mm)'
                ws_new['J3'].font = Font(color="BBBBBB")
                ws_new['J3'] = '髌骨大小'
                ws_new['K3'].font = Font(color="BBBBBB")
                ws_new['K3'] = '髌骨位置安放'
                ws_new['L3'].font = Font(color="BBBBBB")
                ws_new['L3'] = '外侧支持带松解'
                ws_new['M3'].font = Font(color="BBBBBB")
                ws_new['M3'] = '髌骨弹响、弹跳'
                ws_new['N3'].font = Font(bold=True, color="BBBBBB")
                ws_new['N3'] = '髌骨特殊情况备注'
                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(50)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(50)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(50)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(50)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(50)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(50)'
                ws_new['H4'].font = Font(color="BBBBBB")
                ws_new['H4'] = '字符型(50)'
                ws_new['I4'].font = Font(color="BBBBBB")
                ws_new['I4'] = '字符型(50)'
                ws_new['J4'].font = Font(color="BBBBBB")
                ws_new['J4'] = '字符型(50)'
                ws_new['K4'].font = Font(color="BBBBBB")
                ws_new['K4'] = '字符型(50)'
                ws_new['L4'].font = Font(color="BBBBBB")
                ws_new['L4'] = '字符型(50)'
                ws_new['M4'].font = Font(color="BBBBBB")
                ws_new['M4'] = '字符型(50)'
                ws_new['N4'].font = Font(bold=True, color="BBBBBB")
                ws_new['N4'] = '字符型(100)'
             # 安装假体情况
            if title == '安装假体情况':
                ws_new['E1'] = XENCRYPT('echart_data_prosthesis_installation')

                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'bone_manufacturer'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'quantity_cement'
                ws_new['H2'].font = Font(bold=True, color="BBBBBB")
                ws_new['H2'] = 'dry_clean'
                ws_new['I2'].font = Font(bold=True, color="BBBBBB")
                ws_new['I2'] = 'not_dry'
                ws_new['J2'].font = Font(bold=True, color="BBBBBB")
                ws_new['J2'] = 'not_clean'
                ws_new['K2'].font = Font(bold=True, color="BBBBBB")
                ws_new['K2'] = 'blood_residue'
                ws_new['L2'].font = Font(bold=True, color="BBBBBB")
                ws_new['L2'] = 'sclerotic_bone'
                ws_new['M2'].font = Font(bold=True, color="BBBBBB")
                ws_new['M2'] = 'false_decency'
                ws_new['N2'].font = Font(bold=True, color="BBBBBB")
                ws_new['N2'] = 'removal_bone'
                ws_new['O2'].font = Font(bold=True, color="BBBBBB")
                ws_new['O2'] = 'removal_bone_des'
                ws_new['P2'].font = Font(bold=True, color="BBBBBB")
                ws_new['P2'] = 'removal_bone_remarks'
                ws_new['Q2'].font = Font(bold=True, color="BBBBBB")
                ws_new['Q2'] = 'surface_flushing'

                # 列名(中文)
                ws_new['B3'].font = Font(color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(color="BBBBBB")
                ws_new['F3'] = '骨水泥厂商'
                ws_new['G3'].font = Font(color="BBBBBB")
                ws_new['G3'] = '骨水泥数量'
                ws_new['H3'].font = Font(color="BBBBBB")
                ws_new['H3'] = '骨面冲洗情况-干燥清洁'
                ws_new['I3'].font = Font(color="BBBBBB")
                ws_new['I3'] = '骨面冲洗情况-不干燥'
                ws_new['J3'].font = Font(color="BBBBBB")
                ws_new['J3'] = '骨面冲洗情况-不清洁'
                ws_new['K3'].font = Font(color="BBBBBB")
                ws_new['K3'] = '骨面冲洗情况-血迹残留'
                ws_new['L3'].font = Font(color="BBBBBB")
                ws_new['L3'] = '硬化骨面处理'
                ws_new['M3'].font = Font(color="BBBBBB")
                ws_new['M3'] = '假体面'
                ws_new['N3'].font = Font(color="BBBBBB")
                ws_new['N3'] = '骨水泥清除情况'
                ws_new['O3'].font = Font(color="BBBBBB")
                ws_new['O3'] = '骨水泥清除情况描述'
                ws_new['P3'].font = Font(color="BBBBBB")
                ws_new['P3'] = '骨水泥特殊情况备注'
                ws_new['Q3'].font = Font(color="BBBBBB")
                ws_new['Q3'] = '骨面冲洗情况'

                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(50)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(50)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(50)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(50)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(50)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(50)'
                ws_new['H4'].font = Font(color="BBBBBB")
                ws_new['H4'] = '字符型(50)'
                ws_new['I4'].font = Font(color="BBBBBB")
                ws_new['I4'] = '字符型(50)'
                ws_new['J4'].font = Font(color="BBBBBB")
                ws_new['J4'] = '字符型(50)'
                ws_new['K4'].font = Font(color="BBBBBB")
                ws_new['K4'] = '字符型(50)'
                ws_new['L4'].font = Font(color="BBBBBB")
                ws_new['L4'] = '字符型(50)'
                ws_new['M4'].font = Font(color="BBBBBB")
                ws_new['M4'] = '字符型(50)'
                ws_new['N4'].font = Font(color="BBBBBB")
                ws_new['N4'] = '字符型(50)'
                ws_new['O4'].font = Font(color="BBBBBB")
                ws_new['O4'] = '字符型(50)'
                ws_new['P4'].font = Font(color="BBBBBB")
                ws_new['P4'] = '字符型(150)'
                ws_new['Q4'].font = Font(color="BBBBBB")
                ws_new['Q4'] = '字符型(50)'
             # 止血带使用情况
            if title == '止血带使用情况':
                ws_new['E1'] = XENCRYPT('echart_data_usage_tourniquet')

                # 列名(英文)
                ws_new['B2'].font = Font(bold=True, color="BBBBBB")
                ws_new['B2'] = 'patient_name'
                ws_new['C2'].font = Font(bold=True, color="BBBBBB")
                ws_new['C2'] = 'patient_id'
                ws_new['D2'].font = Font(bold=True, color="BBBBBB")
                ws_new['D2'] = 'patient_age'
                ws_new['E2'].font = Font(bold=True, color="BBBBBB")
                ws_new['E2'] = 'patient_sex'
                ws_new['F2'].font = Font(bold=True, color="BBBBBB")
                ws_new['F2'] = 'bleeding_volume'
                ws_new['G2'].font = Font(bold=True, color="BBBBBB")
                ws_new['G2'] = 'tourniquet_time'
                ws_new['H2'].font = Font(bold=True, color="BBBBBB")
                ws_new['H2'] = 'pressure_tourniquet'
                ws_new['I2'].font = Font(bold=True, color="BBBBBB")
                ws_new['I2'] = 'duration_tourniquet'
                ws_new['J2'].font = Font(bold=True, color="BBBBBB")
                ws_new['J2'] = 'operation_duration'
                ws_new['K2'].font = Font(bold=True, color="BBBBBB")
                ws_new['K2'] = 'blood_transfusion'
                ws_new['L2'].font = Font(bold=True, color="BBBBBB")
                ws_new['L2'] = 'hemostatic_effect'
                ws_new['M2'].font = Font(bold=True, color="BBBBBB")
                ws_new['M2'] = 'tourniquet_reaction'
                ws_new['N2'].font = Font(bold=True, color="BBBBBB")
                ws_new['N2'] = 'remarks'
                # 列名(中文)
                ws_new['B3'].font = Font(color="BBBBBB")
                ws_new['B3'] = '患者姓名'
                ws_new['C3'].font = Font(color="BBBBBB")
                ws_new['C3'] = '患者ID'
                ws_new['D3'].font = Font(color="BBBBBB")
                ws_new['D3'] = '患者年龄'
                ws_new['E3'].font = Font(color="BBBBBB")
                ws_new['E3'] = '患者性别'
                ws_new['F3'].font = Font(color="BBBBBB")
                ws_new['F3'] = '出血量(ml)'
                ws_new['G3'].font = Font(color="BBBBBB")
                ws_new['G3'] = '止血带应用时间'
                ws_new['H3'].font = Font(color="BBBBBB")
                ws_new['H3'] = '止血带压力(mmHg)'
                ws_new['I3'].font = Font(color="BBBBBB")
                ws_new['I3'] = '止血带使用时长(min)'
                ws_new['J3'].font = Font(color="BBBBBB")
                ws_new['J3'] = '手术时长(min)'
                ws_new['K3'].font = Font(color="BBBBBB")
                ws_new['K3'] = '输血情况'
                ws_new['L3'].font = Font(color="BBBBBB")
                ws_new['L3'] = '止血效果'
                ws_new['M3'].font = Font(color="BBBBBB")
                ws_new['M3'] = '止血带反应'
                ws_new['N3'].font = Font(color="BBBBBB")
                ws_new['N3'] = '手术-备注信息'
                # 数据类型
                ws_new['B4'].font = Font(color="BBBBBB")
                ws_new['B4'] = '字符型(50)'
                ws_new['C4'].font = Font(color="BBBBBB")
                ws_new['C4'] = '字符型(50)'
                ws_new['D4'].font = Font(color="BBBBBB")
                ws_new['D4'] = '字符型(50)'
                ws_new['E4'].font = Font(color="BBBBBB")
                ws_new['E4'] = '字符型(50)'
                ws_new['F4'].font = Font(color="BBBBBB")
                ws_new['F4'] = '字符型(50)'
                ws_new['G4'].font = Font(color="BBBBBB")
                ws_new['G4'] = '字符型(50)'
                ws_new['H4'].font = Font(color="BBBBBB")
                ws_new['H4'] = '字符型(50)'
                ws_new['I4'].font = Font(color="BBBBBB")
                ws_new['I4'] = '字符型(50)'
                ws_new['J4'].font = Font(color="BBBBBB")
                ws_new['J4'] = '字符型(50)'
                ws_new['K4'].font = Font(color="BBBBBB")
                ws_new['K4'] = '字符型(50)'
                ws_new['L4'].font = Font(color="BBBBBB")
                ws_new['L4'] = '字符型(50)'
                ws_new['M4'].font = Font(color="BBBBBB")
                ws_new['M4'] = '字符型(50)'
                ws_new['N4'].font = Font(color="BBBBBB")
                ws_new['N4'] = '字符型(300)'
        wb.save("static/export_excel/ExcelImportTemplate.xlsx")
        response = HttpResponse(content_type='application/ms-excel')
        response['Content-Disposition'] = 'attachment; filename="ExcelImportTemplate.xlsx"'
        wb.save(response)
        if response:
            return response

        return JsonResponse({'status': 'HttpResponse', 'msg': 'Excel下载失败'})


class UploadExcelFile(APIView):
    def post(self, request):
        try:
            user_id = request.META.get("HTTP_USER_ID")
            user_name = request.META.get("HTTP_USER_NAME")
            roles = request.META.get("HTTP_ROLES")

            time_now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')

            # 1. 获取上传的文件
            file = request.FILES.get('file')
            # 2. 保存文件以便以后查阅
            file_name = file.name
            file_path = "static/export_excel/" + user_id+"_"+roles+"_"+time_now+"_"+file_name
            with open(file_path, 'wb') as f:
                for chunk in file.chunks():
                    f.write(chunk)
            # 3. 检查文件权限是否匹配
            wb = load_workbook(file_path)
            sheet_ranges = wb['系统信息,请勿修改']

            excel_user_id = XDECRYPT(sheet_ranges['C1'].value)
            # excel_user_name = XDECRYPT(sheet_ranges['E1'].value)
            excel_roles = XDECRYPT(sheet_ranges['G1'].value)
            # print(XDECRYPT(sheet_ranges['G1'].value))

            if user_id != excel_user_id:
                result = {
                    "code": 50001,
                    "message": "用户信息不匹配,请检查上传文件是否正确,确保该上传文件是您的账号生成下载的",
                }
                return JsonResponse(result, safe=False)

            if roles != excel_roles:
                result = {
                    "code": 50001,
                    "message": "角色权限不匹配,请检查上传文件是否正确,确保该上传文件是您的账号生成下载的,并且下载后管理员未修改您的系统角色权限",
                }
                return JsonResponse(result, safe=False)

            version = GenerateImportBatch().generate(request)

            result = {
                "code": 20000,
                "message": "上传成功",
                "file_path": file_path,
                "version": version
            }
        except Exception as e:
            result = {
                "code": 40001,
                "data": str(e),
                "message": "获取数据失败"
            }

        return JsonResponse(result, safe=False)


class ImportExcelData(APIView):
    def post(self, request):
        try:
            user_id = request.META.get("HTTP_USER_ID")
            user_name = request.META.get("HTTP_USER_NAME")
            roles = request.META.get("HTTP_ROLES")
            file_path = request.data.get('file_path')
            version_id = request.data.get('version_id')
            version_now = request.data.get('version_now')
            mode = request.data.get('mode')
            version_object = Version.objects.get(id=version_id)

            version_object.progress = 2
            version_object.save()

            # 0. 检查文件权限是否匹配
            wb = load_workbook(file_path)
            sheet_ranges = wb['系统信息,请勿修改']

            excel_user_id = XDECRYPT(sheet_ranges['C1'].value)
            # excel_user_name = XDECRYPT(sheet_ranges['E1'].value)
            excel_roles = XDECRYPT(sheet_ranges['G1'].value)

            if user_id != excel_user_id:
                result = {
                    "code": 50001,
                    "message": "用户信息不匹配,请检查上传文件是否正确,确保该上传文件是您的账号生成下载的",
                }
                return JsonResponse(result, safe=False)
            if roles != excel_roles:
                result = {
                    "code": 50001,
                    "message": "角色权限不匹配,请检查上传文件是否正确,确保该上传文件是您的账号生成下载的,并且下载后管理员未修改您的系统角色权限",
                }
                return JsonResponse(result, safe=False)

            mysql_connection = pymysql.connect(
                host=settings.DATABASE_ADDRESS, port=settings.DATABASE_PORT, user=settings.DATABASE_USERNAME, password=settings.DATABASE_PASSWORD, cursorclass=pymysql.cursors.DictCursor)
            mysql_cursor = mysql_connection.cursor()

            # 1. 获取所有sheets
            print(mode)
            # 导入前去重
            if mode == 'before':
                for sheet_index, sheet in enumerate(wb.worksheets):
                    if sheet_index > 0:  # 不读第一页系统信息
                        database_name = XDECRYPT(sheet['C1'].value)
                        table_name = XDECRYPT(sheet['E1'].value)
                        menu_code = XDECRYPT(sheet['F1'].value)
                        flag = False

                        column_array = []
                        for row_index, row in enumerate(sheet.iter_rows()):
                            if row_index == 1:
                                for cell_index, cell in enumerate(row):
                                    if cell_index > 0:
                                        if cell.value is not None:
                                            # print(cell.value)
                                            column_array.append(cell.value)
                                column_array.append('version')
                                column_array.append('import_time')
                                column_array.append('import_account_id')
                                column_array.append('import_account_name')
                                # column_array.append('roles')
                                column_array.append('status')
                            if row_index > 3:
                                value_array = []
                                for cell_index, cell in enumerate(row):
                                    if cell_index > 0 and cell_index <= (len(column_array) - 5):
                                        if cell.value is not None:
                                            value_array.append(str(cell.value))
                                        else:
                                            value_array.append('')
                                if len(value_array) > 0:
                                    # print(database_name)
                                    # print(table_name)
                                    print(column_array)
                                    print(value_array)
                                    where_sql = ''
                                    for index1 in range(len(column_array)):
                                        for index2 in range(len(value_array)):
                                            if index1 == 0 and index1 == index2 and value_array[index2] != '':
                                                where_sql += column_array[index1] + \
                                                    '=' + "'" + \
                                                    value_array[index2]+"'"
                                            elif index1 == index2 and value_array[index2] != '':
                                                where_sql += ' and ' + column_array[index1] + \
                                                    '=' + "'" + \
                                                    value_array[index2]+"'"
                                                print(where_sql)
                                    select_sql = "select id from " + database_name + \
                                        '.' + table_name + ' where ' + where_sql
                                    print(select_sql)
                                    mysql_cursor.execute(select_sql)
                                    where_id = mysql_cursor.fetchall()
                                    print(where_id)
                                    if where_id == []:
                                        value_array.append(version_now)
                                        value_array.append(
                                            datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
                                        value_array.append(user_id)
                                        value_array.append(user_name)
                                        # value_array.append(roles.replace('[','').replace(']','').replace(' ',''))
                                        value_array.append('1')

                                        insert_sql = "INSERT INTO " + database_name + "." + table_name + \
                                            " (" + ','.join(column_array) + \
                                            ") VALUES ('" + \
                                            "','".join(value_array) + "')"
                                        # insert_sql = 'INSERT INTO ' + database_name + '.' + table_name + ' (' + ','.join(column_array) + ') VALUES ("' + '","'.join(value_array) + '")'
                                        print(insert_sql)
                                        mysql_cursor.execute(insert_sql)
                                        flag = True

                        if flag:

                            new_version = Version()
                            new_version.version = version_now
                            new_version.menu_code = menu_code
                            new_version.tables = database_name + '.' + table_name
                            new_version.columns = ','.join(column_array)
                            new_version.progress = 100
                            new_version.is_finished = 1
                            new_version.is_synced = 0
                            new_version.data_status = 1
                            new_version.create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                            new_version.create_account_id = user_id
                            new_version.create_account_name = user_name
                            new_version.save()
            # 导入后去重
            if mode == 'after':
                for sheet_index, sheet in enumerate(wb.worksheets):
                    if sheet_index > 0:  # 不读第一页系统信息
                        database_name = XDECRYPT(sheet['C1'].value)
                        table_name = XDECRYPT(sheet['E1'].value)
                        menu_code = XDECRYPT(sheet['F1'].value)
                        flag = False

                        column_array = []
                        delete_column_array = []
                        for row_index, row in enumerate(sheet.iter_rows()):
                            if row_index == 1:
                                for cell_index, cell in enumerate(row):
                                    if cell_index > 0:
                                        if cell.value is not None:
                                            # print(cell.value)
                                            column_array.append(cell.value)
                                            delete_column_array.append(
                                                cell.value)
                                column_array.append('version')
                                column_array.append('import_time')
                                column_array.append('import_account_id')
                                column_array.append('import_account_name')
                                # column_array.append('roles')
                                column_array.append('status')
                            if row_index > 3:
                                value_array = []
                                for cell_index, cell in enumerate(row):
                                    if cell_index > 0 and cell_index <= (len(column_array) - 5):
                                        if cell.value is not None:
                                            value_array.append(str(cell.value))
                                        else:
                                            value_array.append('')
                                if len(value_array) > 0:
                                    # print(database_name)
                                    # print(table_name)
                                    value_array.append(version_now)
                                    value_array.append(
                                        datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
                                    value_array.append(user_id)
                                    value_array.append(user_name)
                                    # value_array.append(roles.replace('[','').replace(']','').replace(' ',''))
                                    value_array.append('1')

                                    insert_sql = "INSERT INTO " + database_name + "." + table_name + \
                                        " (" + ','.join(column_array) + \
                                        ") VALUES ('" + \
                                        "','".join(value_array) + "')"
                                    # insert_sql = 'INSERT INTO ' + database_name + '.' + table_name + ' (' + ','.join(column_array) + ') VALUES ("' + '","'.join(value_array) + '")'
                                    print(insert_sql)
                                    mysql_cursor.execute(insert_sql)
                                    # 去重
                        select_sql = "select id," + \
                            ','.join(delete_column_array)+",count(*) " + ' from ' + database_name + "." + \
                            table_name + " group by " + \
                            ','.join(delete_column_array)
                        print(select_sql)
                        mysql_cursor.execute(select_sql)
                        data = mysql_cursor.fetchall()
                        for row in data:
                            if row['count(*)'] == 2:
                                print(row['count(*)'], row['id'])
                                # 删除该id
                                delete_sql = " delete from " + database_name + \
                                    "." + table_name + \
                                    " where id = "+str(row['id'])
                                print(delete_sql)
                                mysql_cursor.execute(delete_sql)
                            elif row['count(*)'] > 2:
                                print(row['count(*)'], row['id'])
                                where_sql = ''
                                for column in delete_column_array:
                                    print(row[column])
                                    if row[column] != '':
                                        where_sql += ' and ' + \
                                            column + '=' + "'" + \
                                            row[column]+"'"
                                # 除了该id都删除
                                print(where_sql)
                                delete_sql = " delete from " + database_name + "." + \
                                    table_name + " where id != " + \
                                    str(row['id']) + where_sql
                                print(delete_sql)
                                mysql_cursor.execute(delete_sql)

                        flag = True

                        if flag:

                            new_version = Version()
                            new_version.version = version_now
                            new_version.menu_code = menu_code
                            new_version.tables = database_name + '.' + table_name
                            new_version.columns = ','.join(column_array)
                            new_version.progress = 100
                            new_version.is_finished = 1
                            new_version.is_synced = 0
                            new_version.data_status = 1
                            new_version.create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                            new_version.create_account_id = user_id
                            new_version.create_account_name = user_name
                            new_version.save()

            version_object.progress = 99
            version_object.save()
            mysql_cursor.execute("commit")
            mysql_cursor.close()

            result = {
                "code": 20000,
                "message": "数据导入进程准备完毕",
                "file_path": file_path
            }

            version_object.progress = 100
            version_object.save()

        except Exception as e:
            result = {
                "code": 40001,
                "data": str(e),
                "message": "数据导入失败"
            }

        return JsonResponse(result, safe=False)


class GenerateImportBatch():
    def generate(self, request):
        version_last = Version.objects.all().order_by('-id').first()
        if version_last is not None:
            table_version = version_last.version
        else:
            table_version = None
        version_plus_one = VersionIncrease().increase(table_version)

        version_now = Version()
        version_now.version = version_plus_one
        version_now.create_time = time.strftime(
            "%Y-%m-%d %H:%M:%S", time.localtime())
        version_now.create_account_id = request.META.get("HTTP_USERID")
        version_now.create_account_name = request.META.get("HTTP_USERNAME")
        version_now.is_finished = 0
        version_now.is_synced = 0
        version_now.progress = '1'
        version_now.save()

        result = {
            "version_id": version_now.id,
            "version_now": version_plus_one,
        }

        return result


class QueryImportExcelDataProgress(APIView):
    def post(self, request):
        try:
            user_id = request.META.get("HTTP_USER_ID")
            user_name = request.META.get("HTTP_USER_NAME")
            roles = request.META.get("HTTP_ROLES")
            file_path = request.data.get('file_path')
            version_id = request.data.get('version_id')
            print(file_path)

            version = Version.objects.get(id=version_id)
            progress = version.progress

            result = {
                "code": 20000,
                "message": "数据导入进程准备完毕",
                "file_path": file_path,
                "progress": progress
            }

        except Exception as e:
            result = {
                "code": 40001,
                "data": str(e),
                "message": "数据导入失败"
            }

        return JsonResponse(result, safe=False)


class VersionIncrease():
    def increase(self, versionNow):
        version = ''
        if versionNow is None:
            version = time.strftime("%Y", time.localtime()) + '.1'
        else:
            versionPrefix = str(versionNow).split('.')[0]
            versionPrefixInt = int(str(versionNow).split('.')[0])
            yearNow = str(time.strftime("%Y", time.localtime()))
            yearNowInt = int(str(time.strftime("%Y", time.localtime())))
            if yearNowInt <= versionPrefixInt:
                versionSuffix = str(versionNow).split('.')[1]
                version = str(versionNow).split(
                    '.')[0] + '.' + str(int(versionSuffix)+1)
            else:
                version = yearNow+'.1'
        return version

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值