2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Pandas als pd importieren
erneut importieren
importiere win32com.client als win32
von win32com.client Konstanten importieren
Betriebssystem importieren
importiere os.path als osp
#Tabelle lesen
Pfad=os.getcwd()
fp=osp.join(Pfad,'fuck_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['Seriennummer','Name des optischen Kabelabschnitts (Ende A-Ende B)'],nrows=72)#Nrows nicht vergessen
df.set_index('serial number',inplace=True)#Index festlegen
#Daten filtern
df_1=df[~df['Name des optischen Kabelabschnitts (Ende A-Ende B)'].str.contains('JT01')]
df_2=df[df['Name des optischen Kabelabschnitts (Ende A-Ende B)'].str.contains('JT01')]
#Vorgangsreferenz df_2-Daten
reg=re.compile(r'(?<=()(.*?)(?=))')
pf=df_2.copy()
pf['AB-Ende extrahieren']=pf['Name des optischen Kabelabschnitts (A-Ende-B-Ende)'].str.extract(reg,expand=False)
pf['Anzahl der Adern des optischen Kabels']=pf['Name des optischen Kabelabschnitts (Ende A-Ende B)'].str.extract(r'(?:.*)(-d+)',expand=False)
pf=pf.iloc[::-1]#Umgekehrte Reihenfolge, Schlüssel
pf['Anzahl der Adern des optischen Kabels'] = pf['Anzahl der Adern des optischen Kabels'].replace('-', '', regex=True)#replace
#Datenverarbeitung
ls=[]
für idx,row in pf.iterrows():
strs_2=row['Name des optischen Kabelabschnitts (Ende A-Ende B)']
strs_3=row['AB-Ende extrahieren']
strs_4=row['Anzahl der Adern des optischen Kabels']
wenn strs_3 in strs_2:
ls.anhängen([idx,strs_3,strs_4])
lg=[]#Storage Das aktuelle Element ist gleich dem vorherigen Element und nicht gleich dem nächsten Element
lf=[]#Storage Die beiden Elemente davor und danach sind nicht gleich
für i im Bereich (Länge (ls)):
wenn ls[i][1]==ls[i-1][1] und ls[i][1]!=ls[i+1][1]:
lt=ls[i-1:i+2]
l1=[]#Speichernummern
l2=[]#AB-Terminal speichern
l3=[]#Speicherung der Anzahl der Adern des optischen Kabels
für j im Bereich (Länge (lt)):
l1.anhängen(lt[j][0])
l2.anhängen(lt[j][1])
l3.anhängen(lt[j][-1])
new_l1=[min(l1),max(l1)]#Ermitteln Sie das Minimum und das Maximum
new_l1=map(str,new_l1)#Listenelemente werden Strings zugeordnet
neu_l2=Liste(Satz(l2))+Liste(Satz(l3))
res_1='-'.join(new_l1)#Seriennummernspleißen
res_2='-'.join(new_l2)#AB-Ende des optischen Kabelkerns beim Spleißen
res_3=list((res_1,res_2))#In Liste konvertieren
lg.append(res_3)
anders:
l1=ls[i][0]#Store-Nummern
l2=ls[i][1]#store AB Ende
l3=ls[i][-1]#storage die Anzahl der Adern des optischen Kabels
res_4=Liste((l1,l2,l3))
lf.anhängen(res_4)
xh=[]#Seriennummer
ab=[]#ab Ende
xs=[]#Anzahl der Kerne
für k im Bereich (Länge (lf)):
l1=lf[k][0]#Speichernummern
l2=lf[k][1]#store AB Ende
l3=lf[k][-1]#storage die Anzahl der Adern des optischen Kabels
xh.anhängen(l1)
ab.append(l2)
xs.anhängen(l3)
#Gruppieren Sie sich paarweise neu
xh=[xh[x:x+2] für x im Bereich (0,Länge(xh),2)]
ab=[ab[x:x+2] für x im Bereich (0, Länge(ab), 2)]
xs=[xs[x:x+2] für x im Bereich (0, Länge(xs), 2)]
lm=[]
für n im Bereich (Länge(xh)):
l1=Liste((min(xh[n]),max(xh[n])))
new_l1=map(str,l1)
l2=Liste(Satz(xs[n]))
l3 = ab[n] + l2
res_1='-'.join(neu_l1)
res_2='-'.join(l3)
lm.append([res_1,res_2])
finall_list=lg+lm
#removeduplication
finall_ls=[]
für l in finall_list:
wenn l nicht in finall_ls:
finall_ls.append(l)
#Erstellen Sie den DataFrame basierend auf der Ergebnisliste neu
df_3=pd.DataFrame(data=final_ls,columns=['Seriennummer','Name des optischen Kabelabschnitts (Ende A-Ende B)'])
df_3.set_index('serial number',drop=True,inplace=True)#Legen Sie die Seriennummernspalte als Index fest
#Spleißen Sie den Abschnitt des optischen Kabels ohne JT und den verarbeiteten Abschnitt mit JT
cf=pd.concat([df_1,df_3],Achse=0)
'''
Es ist in Ordnung, den Index erneut zu ersetzen oder nicht. Wie auch immer, die Zeilennummer basiert auf der Seriennummer + 2
'''
#pywin32Excel-Tabelle lesen
#Excel-Programm ausführen
versuchen:
excel_app = win32.gencache.EnsureDispatch('Excel.Anwendung')
außer:
versuchen:
win32.gencache.EnsureDispatch('et.Anwendung')
außer:
win32.gencache.EnsureDispatch('ket.Anwendung')
Endlich:
excel_app.Sichtbar = True
excel_app.DisplayAlerts = Falsch
#Lesen Sie die erforderlichen Spalten der Tabelle
Arbeitsmappe = excel_app.Workbooks.Open(fp)
worksheet = workbook.Worksheets('list')
Arbeitsblatt.Spalten(3).Einfügen()
Arbeitsblatt.Spalten(4).Einfügen()
worksheet.Cells(2, 3).Value = 'Zeichnungsnummer'#Spaltennamen festlegen
worksheet.Cells(2, 4).Value = 'Absatzname'#Spaltennamen festlegen.
#Operationsformular
für idx,row in cf.iterrows():
dl=row['Name des optischen Kabelabschnitts (Ende A-Ende B)']
bh=idx
wenn '-' in str(bh):
sb=bh.split('-')
start_row=int(min(sb))+2#Startzeilennummer
end_row=int(max(sb))+2#Endzeilennummer
range1_to_merge=worksheet.Range(worksheet.Cells(start_row, 3), worksheet.Cells(end_row, 3))#Die „Zeichnungsnummer“ der Zelle, die zusammengeführt werden soll
range2_to_merge=worksheet.Range(worksheet.Cells(start_row, 4), worksheet.Cells(end_row, 4))#"Absatzname" der Zelle, die zusammengeführt werden soll
range3_to_color=worksheet.Range(worksheet.Cells(start_row, 5), worksheet.Cells(end_row, 5))#Der „Name des optischen Kabelabschnitts (Ende A-Ende B)“ zum Festlegen der Farbe
range4_to_color=worksheet.Range(worksheet.Cells(start_row, 17), worksheet.Cells(end_row, 17))#Die „Bestellnummer + Anforderer“ zum Festlegen der Farbe
range2_to_merge.WrapText = True#Zeilen automatisch umbrechen
range3_to_color.Interior.Color =7396243 # Hellrote Füllfarbe 804040
range4_to_color.Innenraum.Farbe =7396243
#range3_to_merge.Font.Color = 25500 # Dunkelroter Text
range1_to_merge.Value=bh#Zeichnungsnummer
range2_to_merge.Value=dl#Absatz über optische Kabel
range1_to_merge.Merge()
range2_to_merge.Merge()
range2_to_merge.Zeilen.Zeilenhöhe=36
range2_to_merge.Spalten.Spaltenbreite = 34
anders:
Arbeitsblatt.Zellen(idx+2,3).Wert = idx
Arbeitsblatt.Zellen(idx+2,4).Wert = dl
worksheet.Cells(idx+2,4).WrapText = True#Zeilen automatisch umbrechen
#Beenden Sie den Vorgang und speichern Sie das Formular
Arbeitsmappe.Speichern()
Arbeitsmappe.Schließen(Änderungen speichern=Falsch)
excel_app.Beenden()