Mi información de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
importar pandas como pd
importar re
importar win32com.client como win32
desde win32com.client importar constantes
importar sistema operativo
importar os.path como osp
#Leer tabla
ruta=os.getcwd()
fp=osp.join(ruta,'fuck_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['número de serie','nombre de la sección del cable óptico (extremo A-extremo B)'],nrows=72)#No olvides nrows
df.set_index('número de serie',inplace=True)#Establecer índice
#Filtrar datos
df_1=df[~df['Nombre de la sección del cable óptico (extremo A-extremo B)'].str.contains('JT01')]
df_2=df[df['Nombre de la sección del cable óptico (extremo A-extremo B)'].str.contains('JT01')]
#Operación referencia datos df_2
reg=re.compilar(r'(?<=()(.*?)(?=))')
pf=df_2.copiar()
pf['Extract AB end']=pf['Nombre de la sección del cable óptico (extremo A-B)'].str.extract(reg,expand=False)
pf['número de núcleos de cable óptico']=pf['nombre de la sección del cable óptico (extremo A-extremo B)'].str.extract(r'(?:.*)(-d+)',expand=False )
pf=pf.iloc[::-1]#Orden inverso, clave
pf['Número de núcleos de cable óptico'] = pf['Número de núcleos de cable óptico'].replace('-', '', regex=True)#replace
#Procesamiento de datos
ls=[]
para idx, fila en pf.iterrows():
strs_2=row['Nombre de la sección del cable óptico (extremo A-extremo B)']
strs_3=fila['Extraer final AB']
strs_4=fila['Número de núcleos de cable óptico']
si strs_3 en strs_2:
ls.append([idx,cadenas_3,cadenas_4])
lg=[]#Storage el elemento actual es igual al elemento anterior y no igual al siguiente
lf=[]#Almacenamiento los dos elementos antes y después no son iguales
para i en rango(len(ls)):
si ls[i][1]==ls[i-1][1] y ls[i][1]!=ls[i+1][1]:
es=ls[i-1:i+2]
l1=[]#números de tienda
l2=[]#Guardar terminal AB
l3=[]#Almacenamiento del número de núcleos de cable óptico
para j en rango(len(lt)):
l1.append(lt[j][0])
l2.append(lt[j][1])
l3.append(lt[j][-1])
new_l1=[min(l1),max(l1)]#Obtener el mínimo y el máximo
new_l1=map(str,new_l1)#Los elementos de la lista se asignan a cadenas
nuevo_l2=lista(conjunto(l2))+lista(conjunto(l3))
res_1='-'.join(new_l1)#empalme de número de serie
res_2='-'.join(new_l2)#AB empalme del número de núcleo del cable óptico del extremo
res_3=lista((res_1,res_2))#Convertir a lista
lg.append(res_3)
demás:
l1=ls[i][0]#números de tienda
l2=ls[i][1]#almacenar extremo AB
l3=ls[i][-1]#almacenamiento del número de núcleos de cable óptico
res_4=lista((l1,l2,l3))
lf.append(res_4)
xh=[]#número de serie
ab=[]#ab final
xs=[]#número de núcleos
para k en rango(len(lf)):
l1=lf[k][0]#números de tienda
l2=lf[k][1]#almacenar extremo AB
l3=lf[k][-1]#almacenamiento el número de núcleos de cable óptico
xh.append(l1)
ab.append(l2)
xs.append(l3)
#Reagruparse en parejas
xh=[xh[x:x+2] para x en rango(0,len(xh),2)]
ab=[ab[x:x+2] para x en el rango (0,len(ab),2)]
xs=[xs[x:x+2] para x en rango(0,len(xs),2)]
lm=[]
para n en rango(len(xh)):
l1=lista((mín(xh[n]),máx(xh[n])))
nuevo_l1=mapa(cadena,l1)
l2=lista(conjunto(xs[n]))
l3=ab[n]+l2
res_1='-'.join(nuevo_l1)
res_2='-'.join(l3)
lm.append([res_1,res_2])
lista_final=lg+lm
#eliminadoduplicación
finall_ls=[]
para l en finall_list:
si no estoy en finall_ls:
finall_ls.append(l)
#Recrea el DataFrame según la lista de resultados
df_3=pd.DataFrame(data=final_ls,columns=['número de serie','nombre de la sección del cable óptico (extremo A-extremo B)'])
df_3.set_index('serial number',drop=True,inplace=True)#Establezca la columna del número de serie como índice
#Empalme la sección del cable óptico sin JT y la sección procesada con JT
cf=pd.concat([gl_1,gl_3],eje=0)
'''
Está bien reemplazar el índice nuevamente o no reemplazarlo. De todos modos, el número de línea se basa en el número de serie + 2
'''
#pywin32Leer tabla de Excel
#Ejecutar programa excel
intentar:
excel_app = win32.gencache.EnsureDispatch('Excel.Aplicación')
excepto:
intentar:
win32.gencache.EnsureDispatch('et.Aplicación')
excepto:
win32.gencache.EnsureDispatch('ket.Aplicación')
finalmente:
excel_app.Visible = Verdadero
excel_app.DisplayAlerts = Falso
#Lea las columnas requeridas de la tabla
libro de trabajo = excel_app.Workbooks.Open(fp)
hoja de trabajo = libro de trabajo.Hojas de trabajo ('lista')
hoja de trabajo.Columnas(3).Insertar()
hoja de cálculo.Columnas(4).Insertar()
hoja de trabajo.Cells(2, 3).Value = 'Número de dibujo'#Establecer nombre de columna
hoja de trabajo.Cells(2, 4).Value = 'Nombre del párrafo'#Establecer nombre de columna.
#Formulario de operación
para idx, fila en cf.iterrows():
dl=row['Nombre de la sección del cable óptico (extremo A-extremo B)']
bh=idx
si '-' en str(bh):
sb=bh.split('-')
start_row=int(min(sb))+2#Número de fila inicial
end_row=int(max(sb))+2#Fin del número de fila
range1_to_merge=worksheet.Range(worksheet.Cells(start_row, 3), worksheet.Cells(end_row, 3))#El "número de dibujo" de la celda que se va a fusionar
range2_to_merge=worksheet.Range(worksheet.Cells(start_row, 4), worksheet.Cells(end_row, 4))#"Nombre del párrafo" de la celda que se va a fusionar
range3_to_color=worksheet.Range(worksheet.Cells(start_row, 5), worksheet.Cells(end_row, 5))#El "nombre de la sección del cable óptico (extremo A-extremo B)" para establecer el color
range4_to_color=worksheet.Range(worksheet.Cells(start_row, 17), worksheet.Cells(end_row, 17))#El "número de pedido + solicitante" para establecer el color
range2_to_merge.WrapText = True#Ajustar líneas automáticamente
range3_to_color.Interior.Color =7396243 # Color de relleno rojo claro 804040
rango4_a_color.Interior.Color =7396243
#range3_to_merge.Font.Color = 25500 # Texto rojo oscuro
range1_to_merge.Value=bh#Número de dibujo
range2_to_merge.Value=dl#Párrafo de cable óptico
rango1_a_fusionar.Fusionar()
rango2_a_fusionar.Fusionar()
rango2_a_fusionar.Filas.Altura_fila=36
rango2_a_fusionar.Columnas.Ancho_de_columna = 34
demás:
Hoja de trabajo.Celdas(idx+2,3).Valor = idx
Hoja de cálculo.Celdas(idx+2,4).Valor = dl
hoja de trabajo.Cells(idx+2,4).WrapText = True#Ajustar líneas automáticamente
#Finalizar la operación y guardar el formulario
libro de trabajo.Guardar()
libro de trabajo.Cerrar(GuardarCambios=Falso)
excel_app.Salir()