Compartilhamento de tecnologia

pandas pywin32 opera automação de escritório excel

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

importar pandas como pd
importar re
importar win32com.client como win32
de win32com.client importar constantes
importar sistema operacional
importar os.path como osp
 
#Ler tabela
caminho=os.getcwd()
fp=osp.join(caminho,'fuck_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['número de série','nome da seção do cabo óptico (extremidade A-extremidade B)'],nrows=72)#Não se esqueça do nrows
df.set_index('número de série',inplace=True)#Definir índice
 
#Filtrar dados
df_1=df[~df['Nome da seção do cabo óptico (extremidade A-extremidade B)'].str.contains('JT01')]
df_2=df[df['Nome da seção do cabo óptico (extremidade A-extremidade B)'].str.contains('JT01')]
 
#Referência de operação dados df_2
reg=re.compilar(r'(?<=()(.*?)(?=))')
pf=df_2.cópia()
pf['Extract AB end']=pf['Nome da seção do cabo óptico (A-end-B end)'].str.extract(reg,expand=False)
pf['Número de núcleos de cabo óptico']=pf['Nome da seção do cabo óptico (extremidade A-extremidade B)'].str.extract(r'(?:.*)(-d+)',expand=False)
pf=pf.iloc[::-1]#Ordem reversa, chave
pf['Número de núcleos de cabos ópticos'] = pf['Número de núcleos de cabos ópticos'].replace('-', '', regex=True)#replace
 
 
#Processamento de dados
ls=[]
para idx,linha em pf.iterrows():
strs_2=row['Nome da seção do cabo óptico (extremidade A-extremidade B)']
strs_3=linha['Extrair final AB']
strs_4=row['Número de núcleos de cabos ópticos']
se strs_3 em strs_2:
ls.append([idx,strs_3,strs_4])
 
 
lg=[]#Storage o item atual é igual ao item anterior e diferente do próximo item
lf=[]#Storage os dois itens antes e depois não são iguais
para i em intervalo(len(ls)):
se ls[i][1]==ls[i-1][1] e ls[i][1]!=ls[i+1][1]:
lt=ls[i-1:i+2]
l1=[]#Números de armazenamento
l2=[]#Armazenar terminal AB
l3=[]#Storage o número de núcleos do cabo óptico
para j em intervalo(len(lt)):
l1.acrescentar(lt[j][0])
l2.acrescentar(lt[j][1])
l3.acrescentar(lt[j][-1])
 
new_l1=[min(l1),max(l1)]#Obter o mínimo e o máximo
new_l1=map(str,new_l1)#Os elementos da lista são mapeados para strings
novo_l2=lista(conjunto(l2))+lista(conjunto(l3))
res_1='-'.join(new_l1)#splicing do número de série
res_2='-'.join(new_l2)#AB emenda do número do núcleo do cabo óptico
res_3=list((res_1,res_2))#Converter para lista
lg.acrescentar(res_3)
outro:
l1=ls[i][0]#números de lojas
l2=ls[i][1]#loja AB fim
l3=ls[i][-1]#storage o número de núcleos do cabo óptico
res_4=lista((l1,l2,l3))
lf.acrescentar(res_4)
 
 
 
xh=[]#número de série
ab=[]#ab fim
xs=[]#número de núcleos
para k em intervalo(len(lf)):
l1=lf[k][0]#números de loja
l2=lf[k][1]#loja AB fim
l3=lf[k][-1]#storage o número de núcleos do cabo óptico
xh.acrescentar(l1)
ab.acrescentar(l2)
xs.acrescentar(l3)
 
#Reagrupar em pares
xh=[xh[x:x+2] para x no intervalo(0,len(xh),2)]
ab=[ab[x:x+2] para x no intervalo(0,len(ab),2)]
xs=[xs[x:x+2] para x no intervalo(0,len(xs),2)]
 
lm=[]
para n no intervalo(len(xh)):
l1=lista((min(xh[n]),max(xh[n])))
novo_l1=mapa(str,l1)
l2=lista(conjunto(xs[n]))
l3=ab[n]+l2
 
res_1='-'.join(novo_l1)
res_2='-'.juntar(l3)
lm.acrescentar([res_1,res_2])
 
 
lista_final=lg+lm
 
#removidoduplicação
finall_ls=[]
para l em finall_list:
se eu não estiver em finall_ls:
finall_ls.append(l)
 
#Recriar o DataFrame com base na lista de resultados
df_3=pd.DataFrame(data=final_ls,columns=['número de série','nome da seção do cabo óptico (extremidade A-extremidade B)'])
df_3.set_index('serial number',drop=True,inplace=True)#Defina a coluna do número de série como índice
 
 
#Emende a seção do cabo óptico sem JT e a seção processada com JT
cf=pd.concat([df_1,df_3],eixo=0)
 
 
'''
Não há problema em substituir o índice novamente ou não substituí-lo. De qualquer forma, o número da linha é baseado no número de série + 2
'''
 
#pywin32Leia a tabela do Excel
#Execute o programa Excel
tentar:
excel_app = win32.gencache.EnsureDispatch('Excel.Aplicativo')
exceto:
tentar:
win32.gencache.EnsureDispatch('et.Aplicativo')
exceto:
win32.gencache.EnsureDispatch('ket.Aplicativo')
finalmente:
excel_app.Visible = Verdadeiro
excel_app.DisplayAlerts = Falso
#Leia as colunas obrigatórias da tabela
pasta de trabalho = excel_app.Workbooks.Open(fp)
planilha = pasta de trabalho.Worksheets('lista')
planilha.Colunas(3).Inserir()
planilha.Colunas(4).Inserir()
worksheet.Cells(2, 3).Value = 'Número do desenho'#Definir nome da coluna
worksheet.Cells(2, 4).Value = 'Nome do parágrafo'#Definir nome da coluna.
 
#Formulário de operação
para idx, linha em cf.iterrows():
dl=row['Nome da seção do cabo óptico (extremidade A-extremidade B)']
bh=idx
se '-' em str(bh):
sb=bh.split('-')
start_row=int(min(sb))+2#Número da linha inicial
end_row=int(max(sb))+2#Fim do número da linha
range1_to_merge=worksheet.Range(worksheet.Cells(start_row, 3), worksheet.Cells(end_row, 3))#O "número do desenho" da célula a ser mesclada
range2_to_merge=worksheet.Range(worksheet.Cells(start_row, 4), worksheet.Cells(end_row, 4))#"Nome do parágrafo" da célula a ser mesclada
range3_to_color=worksheet.Range(worksheet.Cells(start_row, 5), worksheet.Cells(end_row, 5))#O "nome da seção do cabo óptico (extremidade A-extremidade B)" para definir a cor
range4_to_color=worksheet.Range(worksheet.Cells(start_row, 17), worksheet.Cells(end_row, 17))#O "número do pedido + solicitante" para definir a cor
range2_to_merge.WrapText = True#Quebrar linhas automaticamente
range3_to_color.Interior.Color =7396243 # Cor de preenchimento vermelho claro 804040
intervalo4_para_cor.Interior.Cor =7396243
#range3_to_merge.Font.Color = 25500 # Texto vermelho escuro
range1_to_merge.Value=bh#Número do desenho
range2_to_merge.Value=dl#Parágrafo do cabo óptico
intervalo1_para_mesclar.Mesclar()
intervalo2_para_mesclar.Mesclar()
range2_to_merge.Linhas.AlturaDaLinha=36
range2_to_merge.Columns.Largura_da_coluna = 34
outro:
planilha.Células(idx+2,3).Valor = idx
planilha.Células(idx+2,4).Valor = dl
worksheet.Cells(idx+2,4).WrapText = True#Quebrar linhas automaticamente
 
 
#Finalize a operação e salve o formulário
pasta de trabalho.Salvar()
workbook.Close(SalvarAlterações=Falso)
excel_app.Sair()