2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
tuo pandat pd-muodossa
tuonti re
tuo win32com.client nimellä win32
win32com.client tuontivakioista
tuonti os
tuo os.path nimellä osp
#Lue taulukko
path=os.getcwd()
fp=osp.join(polku,'vitun_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['sarjanumero','optisen kaapelin osan nimi (pää A-pää B)'],nrows=72)#Älä unohda nrows
df.set_index('sarjanumero',inplace=True)#Aseta indeksi
#Suodata tiedot
df_1=df[~df['Optisen kaapelin osan nimi (pää A-pää B)'].str.contains('JT01')]
df_2=df[df['Optisen kaapelin osan nimi (pää A-pää B)'].str.contains('JT01')]
#Toimintaviite df_2-tiedot
reg=re.compile(r'(?<=()(.*?)(?=))')
pf=df_2.copy()
pf['Extract AB end']=pf['Optisen kaapelin osan nimi (A-end-B end)'].str.extract(reg,expand=False)
pf['Optisten kaapelien ytimien lukumäärä']=pf['Optisen kaapelin osan nimi (pää A-B)'].str.extract(r'(?:.*)(-d+)',expand=False)
pf=pf.iloc[::-1]#Käänteinen järjestys, avain
pf['Optisten kaapelisydämien määrä'] = pf['Optisten kaapelien ytimien lukumäärä'].replace('-', '', regex=True)#replace
#Tietojenkäsittely
ls=[]
idx,row in pf.iterrows():
strs_2=row['Optisen kaapelin osan nimi (pää A-pää B)']
strs_3=row['Pura AB loppu']
strs_4=row['Optisten kaapelien ytimien määrä']
if strs_3 in strs_2:
ls.append([idx,strs_3,strs_4])
lg=[]#Storage nykyinen kohde on yhtä suuri kuin edellinen kohde eikä yhtä suuri kuin seuraava kohde
lf=[]#Tallennustila ennen ja jälkeen olevat kohteet eivät ole samat
i:lle alueella (len(ls)):
jos ls[i][1]==ls[i-1][1] ja ls[i][1]!=ls[i+1][1]:
lt=ls[i-1:i+2]
l1=[]#tallennusnumeroita
l2=[]#Store AB -pääte
l3=[]#Tallenna optisten kaapelien ytimien määrä
j:lle alueella(len(lt)):
l1.append(lt[j][0])
l2.append(lt[j][1])
l3.append(lt[j][-1])
new_l1=[min(l1),max(l1)]#Hae minimi- ja enimmäismäärä
new_l1=map(str,new_l1)#Listaelementit on yhdistetty merkkijonoihin
uusi_l2=luettelo(joukko(l2))+luettelo(joukko(l3))
res_1='-'.join(new_l1)#sarjanumeron liitos
res_2='-'.join(new_l2)#AB-pään optisen kaapelin ytimen numeron liitos
res_3=list((res_1,res_2))#Muunna listaksi
lg.append(res_3)
muu:
l1=ls[i][0]# myymälän numeroa
l2=ls[i][1]#myymälä AB loppu
l3=ls[i][-1]#tallennus optisten kaapelisydämien määrä
res_4=list((l1,l2,l3))
lf.append(res_4)
xh=[]# sarjanumero
ab=[]#ab end
xs=[]# ytimien määrä
k:lle alueella(len(lf)):
l1=lf[k][0]# myymälän numeroa
l2=lf[k][1]#myymälä AB loppu
l3=lf[k][-1]#tallennus optisten kaapelisydämien määrä
xh.append(l1)
ab.append(l2)
xs.append(l3)
#ryhmittykää pareittain
xh=[xh[x:x+2] x:lle alueella(0,len(xh),2)]
ab=[ab[x:x+2] x:lle alueella(0,len(ab),2)]
xs=[xs[x:x+2] x:lle alueella(0,len(xs),2)]
lm=[]
n:lle alueella (len(xh)):
l1=luettelo((min(xt[n]),max(xt[n])))
uusi_l1=kartta(str,l1)
l2=lista(joukko(xs[n]))
l3=ab[n]+l2
res_1='-'.join(new_l1)
res_2='-'.join(l3)
lm.append([res_1,res_2])
finall_list=lg+lm
#removedupplication
finall_ls=[]
l in finall_list:
jos en finall_ls:ssä:
finall_ls.append(l)
#Luo DataFrame uudelleen tulosluettelon perusteella
df_3=pd.DataFrame(data=final_ls,columns=['sarjanumero','optisen kaapelin osan nimi (pää A-B)'])
df_3.set_index('sarjanumero',drop=True,inplace=True)#Aseta sarjanumerosarake indeksiksi
#Liitä optisen kaapelin osa ilman JT:tä ja käsitelty osa JT:llä
cf=pd.concat([df_1,df_3],akseli=0)
'''
On okei vaihtaa indeksi uudelleen tai olla korvaamatta sitä. Joka tapauksessa rivinumero perustuu sarjanumeroon + 2
'''
#pywin32Lue Excel-taulukko
#Suorita excel-ohjelma
yrittää:
excel_app = win32.gencache.EnsureDispatch('Excel.Application')
paitsi:
yrittää:
win32.gencache.EnsureDispatch('et.Application')
paitsi:
win32.gencache.EnsureDispatch('ket.Application')
lopuksi:
excel_app.Visible = Totta
excel_app.DisplayAlerts = Väärin
#Lue taulukon vaaditut sarakkeet
työkirja = excel_app.Workbooks.Open(fp)
taulukko = työkirja. Työarkit('list')
laskentataulukko.Sarakkeet(3).Insert()
laskentataulukko.Sarakkeet(4).Insert()
workheet.Cells(2, 3).Value = 'Piirosnumero'#Aseta sarakkeen nimi
workheet.Cells(2, 4).Value = 'Kappaleen nimi'#Aseta sarakkeen nimi.
#Toimintalomake
idx,row in cf.iterrows():
dl=row['Optisen kaapelin osan nimi (pää A-pää B)']
bh=idx
jos '-' str(bh:ssa):
sb=bh.split('-')
aloitusrivi=int(min(sb))+2#Aloitusrivin numero
end_row=int(max(sb))+2#Loppurivin numero
range1_to_merge=worksheet.Range(worksheet.Cells(alkurivi, 3), workheet.Cells(end_row, 3))#Yhdistettävän solun "piirustusnumero"
range2_to_merge=worksheet.Range(työtaulukko.Solut(aloitusrivi, 4), työtaulukko.Cells(loppurivi, 4))#Yhdistettävän solun "kappaleen nimi"
range3_to_color=worksheet.Range(worksheet.Cells(aloitusrivi, 5), workheet.Cells(end_row, 5))#"Optisen kaapelin osan nimi (pää A-pää B)" värin asettamiseen
range4_to_color=worksheet.Range(worksheet.Cells(alkurivi, 17), workheet.Cells(loppurivi, 17))#"Tilausnumero + pyytäjä" värin asettamiseen
range2_to_merge.WrapText = True#Kierrä rivit automaattisesti
range3_to_color.Interior.Color =7396243 # Vaaleanpunainen täyteväri 804040
range4_to_color.Interior.Color =7396243
#range3_to_merge.Font.Color = 25500 # Tummanpunainen teksti
range1_to_merge.Value=bh#Piirosnumero
range2_to_merge.Value=dl#Optisen kaapelin kappale
range1_to_merge.Merge()
range2_to_merge.Merge()
range2_to_merge.Rows.RowHeight=36
alue2_yhdistettävä.Sarakkeet.Sarakkeen leveys = 34
muu:
taulukko. Solut(idx+2,3).Arvo = idx
taulukko. Solut(idx+2,4). Arvo = dl
laskentataulukko.Cells(idx+2,4).WrapText = True#Rimi rivit automaattisesti
#Lopeta toiminto ja tallenna lomake
työkirja.Tallenna()
workbook.Close(SaveChanges=False)
excel_app.Quit()