informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
impor panda sebagai pd
impor ulang
impor win32com.client sebagai win32
dari win32com.client impor konstanta
impor os
impor os.path sebagai osp
#Baca tabel
jalur=os.getcwd()
fp=osp.gabung(jalur,'fuck_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['nomor seri','nama bagian kabel optik (ujung A-ujung B)'],nrows=72)#Jangan lupa sekarang
df.set_index('nomor seri',inplace=True)#Set indeks
#Filter data
df_1=df[~df['Nama bagian kabel optik (ujung A-ujung B)'].str.contains('JT01')]
df_2=df[df['Nama bagian kabel optik (ujung A-ujung B)'].str.contains('JT01')]
#Referensi operasi data df_2
reg=re.kompilasi(r'(?<=()(.*?)(?=))')
pf=df_2.salin()
pf['Ekstrak ujung AB']=pf['Nama bagian kabel optik (ujung A-end-B)'].str.extract(reg,expand=False)
pf['jumlah inti kabel optik']=pf['nama bagian kabel optik (ujung A-ujung B)'].str.extract(r'(?:.*)(-d+)',expand=False )
pf=pf.iloc[::-1]#Urutan terbalik, kunci
pf['Jumlah inti kabel optik'] = pf['Jumlah inti kabel optik'].replace('-', '', regex=True)#replace
#Pengolahan data
ls=[]
untuk idx, baris dalam pf.iterrows():
strs_2=baris['Nama bagian kabel optik (ujung A-ujung B)']
strs_3=baris['Ekstrak ujung AB']
strs_4=baris['Jumlah inti kabel optik']
jika strs_3 di strs_2:
ls.tambahkan([idx,strs_3,strs_4])
lg=[]#Penyimpanan item saat ini sama dengan item sebelumnya dan tidak sama dengan item berikutnya
lf=[]#Penyimpanan dua item sebelum dan sesudah tidak sama
untuk i dalam rentang(len(ls)):
jika ls[i][1]==ls[i-1][1] dan ls[i][1]!=ls[i+1][1]:
lt=i-1:i+2]
l1=[]#nomor toko
l2=[]#Toko terminal AB
l3=[]#Penyimpanan jumlah inti kabel optik
untuk j dalam rentang(len(lt)):
l1.tambahkan(lt[j][0])
l2.tambahkan(lt[j][1])
l3.tambahkan(lt[j][-1])
new_l1=[min(l1),max(l1)]#Dapatkan nilai minimum dan maksimum
new_l1=map(str,new_l1)#Elemen daftar dipetakan ke string
new_l2=daftar(set(l2))+daftar(set(l3))
res_1='-'.join(new_l1)#penyambungan nomor seri
res_2='-'.join(new_l2)#penyambungan nomor inti kabel optik ujung AB
res_3=daftar((res_1,res_2))#Konversikan ke daftar
lg.tambahkan(res_3)
kalau tidak:
l1=ls[i][0]#nomor penyimpanan
l2=ls[i][1]#penyimpanan AB akhir
l3=ls[i][-1]#storage jumlah inti kabel optik
res_4=daftar((l1,l2,l3))
lf.tambahkan(res_4)
xh=[]#nomor seri
ab=[]#ab berakhir
xs=[]#jumlah inti
untuk k dalam rentang(len(lf)):
l1=lf[k][0]#nomor toko
l2=lf[k][1]#penyimpanan AB akhir
l3=lf[k][-1]#storage jumlah inti kabel optik
xh.tambahkan(l1)
ab.tambahkan(l2)
xs.tambahkan(l3)
#Kelompokkan kembali secara berpasangan
xh=[xh[x:x+2] untuk x dalam rentang(0,len(xh),2)]
ab=[ab[x:x+2] untuk x dalam rentang(0,len(ab),2)]
xs=[xs[x:x+2] untuk x dalam rentang(0,len(xs),2)]
aku=[]
untuk n dalam rentang(len(xh)):
l1=daftar((min(xh[n]),maks(xh[n])))
new_l1=peta(str,l1)
l2=daftar(set(xs[n]))
l3=ab[n]+l2
res_1='-'.gabung(new_l1)
res_2='-'.gabung(l3)
lm.tambahkan([res_1,res_2])
daftar_final=lg+lm
#hapusduplikasi
finall_ls=[]
untuk l di finall_list:
jika l tidak ada di finall_ls:
finall_ls.tambahkan(l)
#Buat ulang DataFrame berdasarkan daftar hasil
df_3=pd.DataFrame(data=final_ls,columns=['nomor seri','nama bagian kabel optik (ujung A-ujung B)'])
df_3.set_index('nomor seri',drop=True,inplace=True)#Tetapkan kolom nomor seri sebagai indeks
#Sambungkan bagian kabel optik tanpa JT dan bagian yang diproses dengan JT
cf=pd.concat([df_1,df_3],sumbu=0)
'''
Tidak apa-apa jika indeksnya diganti lagi, atau tidak. Oya, nomor barisnya berdasarkan nomor seri + 2
'''
#pywin32Baca tabel excel
#Jalankan program excel
mencoba:
excel_app = win32.gencache.EnsureDispatch('Aplikasi Excel')
kecuali:
mencoba:
win32.gencache.EnsureDispatch('et.Aplikasi')
kecuali:
win32.gencache.EnsureDispatch('ket.Aplikasi')
Akhirnya:
excel_app.Visible = Benar
excel_app.DisplayAlerts = Salah
#Baca kolom tabel yang diperlukan
buku kerja = excel_app.Workbooks.Open(fp)
lembar kerja = buku kerja.Lembar kerja('daftar')
lembar kerja.Kolom(3).Sisipkan()
lembar kerja.Kolom(4).Sisipkan()
worksheet.Cells(2, 3).Value = 'Nomor gambar'#Tetapkan nama kolom
worksheet.Cells(2, 4).Value = 'Nama paragraf'#Tetapkan nama kolom.
#Bentuk operasi
untuk idx, baris dalam cf.iterrows():
dl=row['Nama bagian kabel optik (ujung A-ujung B)']
bh=idx
jika '-' di str(bh):
sb=bh.pisah('-')
start_row=int(min(sb))+2#Nomor baris awal
end_row=int(max(sb))+2#Nomor baris akhir
range1_to_merge=worksheet.Range(worksheet.Cells(start_row, 3), worksheet.Cells(end_row, 3))#"Nomor gambar" dari sel yang akan digabungkan
range2_to_merge=worksheet.Range(worksheet.Cells(start_row, 4), worksheet.Cells(end_row, 4))#"Nama paragraf" dari sel yang akan digabungkan
range3_to_color=worksheet.Range(worksheet.Cells(start_row, 5), worksheet.Cells(end_row, 5))#"Nama bagian kabel optik (ujung A-end B)" untuk mengatur warna
range4_to_color=worksheet.Range(worksheet.Cells(start_row, 17), worksheet.Cells(end_row, 17))#"Nomor pesanan + peminta" untuk mengatur warna
range2_to_merge.WrapText = True#Membungkus garis secara otomatis
range3_to_color.Interior.Color =7396243 # Warna isian merah muda 804040
rentang4_ke_warna.Interior.Warna =7396243
#range3_to_merge.Font.Color = 25500 # Teks merah tua
range1_to_merge.Value=bh#Nomor gambar
range2_to_merge.Value=dl#Paragraf kabel optik
rentang1_untuk_digabung.Gabung()
range2_untuk_digabung.Gabung()
range2_untuk_menggabungkan.Baris.TinggiRow=36
range2_untuk_digabungkan.Kolom.LebarKolom = 34
kalau tidak:
lembar kerja.Sel(idx+2,3).Nilai = idx
lembar kerja.Sel(idx+2,4).Nilai = dl
worksheet.Cells(idx+2,4).WrapText = True#Membungkus garis secara otomatis
#Akhiri operasi dan simpan formulir
buku kerja.Simpan()
buku kerja.Tutup(SimpanPerubahan=Salah)
excel_app.Keluar()