Condivisione della tecnologia

pandas pywin32 gestisce l'automazione dell'ufficio Excel

2024-07-12

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

importa pandas come pd
importare re
importa win32com.client come win32
da win32com.client importa costanti
importare sistema operativo
importa os.path come osp
 
#Leggi la tabella
percorso=os.getcwd()
fp=osp.join(percorso,'fuck_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['numero di serie','nome della sezione del cavo ottico (estremità A-estremità B)'],nrows=72)#Non dimenticare nrows
df.set_index('numero di serie',inplace=True)#Imposta indice
 
#Filtra dati
df_1=df[~df['Nome sezione cavo ottico (estremità A-estremità B)'].str.contains('JT01')]
df_2=df[df['Nome sezione cavo ottico (estremità A-estremità B)'].str.contains('JT01')]
 
#Dati df_2 di riferimento dell'operazione
reg=re.compile(r'(?<=()(.*?)(?=))')
pf=df_2.copia()
pf['Estrai fine AB']=pf['Nome sezione cavo ottico (estremità A-B)'].str.extract(reg,expand=False)
pf['numero di nuclei del cavo ottico']=pf['nome della sezione del cavo ottico (estremità A-estremità B)'].str.extract(r'(?:.*)(-d+)',expand=False )
pf=pf.iloc[::-1]#Ordine inverso, chiave
pf['Numero di nuclei del cavo ottico'] = pf['Numero di nuclei del cavo ottico'].replace('-', '', regex=True)#replace
 
 
#Elaborazione dati
ls=[]
per idx, riga in pf.iterrows():
strs_2=row['Nome sezione cavo ottico (estremità A-estremità B)']
strs_3=riga['Estrai fine AB']
strs_4=row['Numero di nuclei del cavo ottico']
se strs_3 in strs_2:
ls.append([idx,strs_3,strs_4])
 
 
lg=[]#Memoria l'elemento corrente è uguale all'elemento precedente e non uguale all'elemento successivo
lf=[]#Archiviazione i due elementi prima e dopo non sono uguali
per i nell'intervallo(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=[]#memorizza numeri
l2=[]#Memorizza terminale AB
l3=[]#Memorizza il numero di nuclei del cavo ottico
per j nell'intervallo(len(lt)):
l1.append(lt[j][0])
l2.append(lt[j][1])
l3.append(lt[j][-1])
 
new_l1=[min(l1),max(l1)]#Ottieni il minimo e il massimo
new_l1=map(str,new_l1)#Gli elementi della lista sono mappati in stringhe
new_l2=elenco(set(l2))+elenco(set(l3))
res_1='-'.join(new_l1)#giunzione del numero di serie
res_2='-'.join(new_l2)#AB giunzione del numero di conduttori del cavo ottico finale
res_3=lista((res_1,res_2))#Converti in lista
lg.append(res_3)
altro:
l1=ls[i][0]#memorizza numeri
l2=ls[i][1]#memorizza AB fine
l3=ls[i][-1]#storage il numero di nuclei del cavo ottico
res_4=elenco((l1,l2,l3))
lf.append(res_4)
 
 
 
xh=[]#numero di serie
ab=[]#ab fine
xs=[]#numero di core
per k nell'intervallo(len(lf)):
l1=lf[k][0]#memorizza numeri
l2=lf[k][1]#memorizza AB fine
l3=lf[k][-1]#storage il numero di nuclei del cavo ottico
xh.append(l1)
ab.append(l2)
xs.append(l3)
 
#Riorganizzarsi in coppia
xh=[xh[x:x+2] per x nell'intervallo(0,len(xh),2)]
ab=[ab[x:x+2] per x nell'intervallo(0,len(ab),2)]
xs=[xs[x:x+2] per x nell'intervallo(0,len(xs),2)]
 
lm=[]
per n nell'intervallo(len(xh)):
l1=elenco((min(xh[n]),max(xh[n])))
new_l1=mappa(str,l1)
l2=elenco(insieme(xs[n]))
l3=ab[n]+l2
 
res_1='-'.join(nuovo_l1)
res_2='-'.join(l3)
lm.append([res_1,res_2])
 
 
lista_finale=lg+lm
 
#removeduplication
finall_ls=[]
per l in finall_list:
se l non è in finall_ls:
finall_ls.append(l)
 
#Ricrea il DataFrame in base all'elenco dei risultati
df_3=pd.DataFrame(data=final_ls,columns=['numero di serie','nome della sezione del cavo ottico (estremità A-estremità B)'])
df_3.set_index('numero di serie',drop=True,inplace=True)#Imposta la colonna del numero di serie come indice
 
 
#Giuntare il tratto di cavo ottico senza JT e il tratto lavorato con JT
cf=pd.concat([df_1,df_3],asse=0)
 
 
'''
È possibile sostituire nuovamente l'indice o non sostituirlo. In ogni caso, il numero di riga si basa sul numero di serie + 2
'''
 
#pywin32Leggi la tabella Excel
#Esegui il programma Excel
Tentativo:
excel_app = win32.gencache.EnsureDispatch('Excel.Applicazione')
tranne:
Tentativo:
win32.gencache.EnsureDispatch('et.Applicazione')
tranne:
win32.gencache.EnsureDispatch('ket.Applicazione')
Finalmente:
excel_app.Visibile = Vero
excel_app.DisplayAlerts = Falso
#Leggi le colonne richieste della tabella
cartella di lavoro = excel_app.Workbooks.Open(fp)
foglio di lavoro = cartella di lavoro.Fogli di lavoro('elenco')
foglio di lavoro.Colonne(3).Inserisci()
foglio di lavoro.Colonne(4).Inserisci()
worksheet.Cells(2, 3).Value = 'Numero disegno'#Imposta il nome della colonna
worksheet.Cells(2, 4).Value = 'Nome paragrafo'#Imposta il nome della colonna.
 
#Modulo operativo
per idx, riga in cf.iterrows():
dl=row['Nome sezione cavo ottico (estremità A-estremità B)']
bh=idx
se '-' in str(bh):
sb=bh.split('-')
start_row=int(min(sb))+2#Numero della riga iniziale
end_row=int(max(sb))+2#Numero di riga finale
range1_to_merge=worksheet.Range(worksheet.Cells(start_row, 3), worksheet.Cells(end_row, 3))#Il "numero di disegno" della cella da unire
range2_to_merge=worksheet.Range(worksheet.Cells(start_row, 4), worksheet.Cells(end_row, 4))#"Nome paragrafo" della cella da unire
range3_to_color=worksheet.Range(worksheet.Cells(start_row, 5), worksheet.Cells(end_row, 5))#Il "nome della sezione del cavo ottico (estremità A-estremità B)" per impostare il colore
range4_to_color=worksheet.Range(worksheet.Cells(start_row, 17), worksheet.Cells(end_row, 17))#Il "numero ordine + richiedente" per impostare il colore
range2_to_merge.WrapText = True#Avvolge automaticamente le righe
range3_to_color.Interior.Color =7396243 # Colore di riempimento rosso chiaro 804040
range4_to_color.Interior.Color =7396243
#range3_to_merge.Font.Color = 25500 # Testo rosso scuro
range1_to_merge.Value=bh#Numero del disegno
range2_to_merge.Value=dl#Paragrafo cavo ottico
range1_to_merge.Unisci()
range2_to_merge.Unisci()
range2_to_merge.Righe.RowHeight=36
range2_to_merge.Columns.ColumnWidth = 34
altro:
foglio di lavoro.Celle(idx+2,3).Valore = idx
foglio di lavoro.Celle(idx+2,4).Valore = dl
worksheet.Cells(idx+2,4).WrapText = True#Avvolge automaticamente le righe
 
 
#Termina l'operazione e salva il modulo
cartella di lavoro.Salva()
cartella di lavoro.Chiudi(SaveChanges=False)
excel_app.Esci()