Κοινή χρήση τεχνολογίας

Το pandas pywin32 λειτουργεί αυτοματισμούς γραφείου excel

2024-07-12

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

εισαγωγή panda ως pd
εισαγωγή ρε
εισαγάγετε το win32com.client ως win32
από τις σταθερές εισαγωγής win32com.client
εισαγωγή os
εισαγωγή os.path ως osp
 
#Διαβάστε πίνακα
path=os.getcwd()
fp=osp.join(διαδρομή,'fuck_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['σειριακός αριθμός','όνομα τμήματος οπτικού καλωδίου (τέλος Α-άκρο Β)'],nrows=72)#Μην ξεχνάτε τα νrows
df.set_index('σειριακός αριθμός',inplace=True)#Set index
 
#Φίλτρο δεδομένων
df_1=df[~df['Όνομα τμήματος οπτικού καλωδίου (τέλος Α-άκρο Β)'].str.contains('JT01')]
df_2=df[df['Όνομα τμήματος οπτικού καλωδίου (τέλος Α-άκρο Β)'].str.contains('JT01')]
 
#Δεδομένα αναφοράς λειτουργίας df_2
reg=re.compile(r'(?<=()(.*?)(?=))')
pf=df_2.copy()
pf['Extract AB end']=pf['Όνομα τμήματος οπτικού καλωδίου (A-end-B end)'].str.extract(reg,expand=False)
pf['αριθμός πυρήνων οπτικού καλωδίου']=pf['όνομα τμήματος οπτικού καλωδίου (τέλος Α-άκρο Β)'].str.extract(r'(?:.*)(-d+)',expand=False )
pf=pf.iloc[::-1]#Αντίστροφη σειρά, κλειδί
pf['Αριθμός πυρήνων οπτικών καλωδίων'] = pf['Αριθμός πυρήνων οπτικών καλωδίων'].replace('-', '', regex=True)#replace
 
 
#Επεξεργασία δεδομένων
ls=[]
για idx,row στο pf.iterrows():
strs_2=row['Όνομα τμήματος οπτικού καλωδίου (τέλος Α-άκρο Β)']
strs_3=row['Extract AB end']
strs_4=row['Αριθμός πυρήνων οπτικών καλωδίων']
if strs_3 σε strs_2:
ls.append([idx,strs_3,strs_4])
 
 
lg=[]#Storage το τρέχον στοιχείο είναι ίσο με το προηγούμενο στοιχείο και όχι ίσο με το επόμενο στοιχείο
lf=[]#Storage τα δύο στοιχεία πριν και μετά δεν είναι ίσα
για i στο εύρος(len(ls)):
αν ls[i][1]==ls[i-1][1] και ls[i][1]!=ls[i+1][1]:
lt=ls[i-1:i+2]
l1=[]#αριθμοί καταστήματος
l2=[]#Store AB terminal
l3=[]#Storage τον αριθμό των πυρήνων οπτικών καλωδίων
για j στην περιοχή (len(lt)):
l1.append(lt[j][0])
l2.append(lt[j][1])
l3.append(lt[j][-1])
 
new_l1=[min(l1),max(l1)]#Λάβετε το ελάχιστο και το μέγιστο
new_l1=map(str,new_l1)#Τα στοιχεία λίστας αντιστοιχίζονται σε συμβολοσειρές
new_l2=list(set(l2))+list(set(l3))
res_1='-'.join(new_l1)#συναρμολόγηση σειριακού αριθμού
res_2='-'.join(new_l2)#AB τέλος οπτικού καλωδίου συρραφής αριθμός πυρήνα
res_3=list((res_1,res_2))#Convert to list
lg.append(res_3)
αλλού:
l1=ls[i][0]#αριθμοί καταστήματος
l2=ls[i][1]#store AB end
l3=ls[i][-1]#storage τον αριθμό των πυρήνων του οπτικού καλωδίου
res_4=list((l1,l2,l3))
lf.append(res_4)
 
 
 
xh=[]#σειριακός αριθμός
ab=[]#ab τέλος
xs=[]# αριθμός πυρήνων
για k στην περιοχή (len(lf)):
l1=lf[k][0]#αριθμοί καταστήματος
l2=lf[k][1]#store AB end
l3=lf[k][-1]#storage τον αριθμό των πυρήνων του οπτικού καλωδίου
xh.append(l1)
ab.append(l2)
xs.append(l3)
 
#Ανασυγκροτηθείτε σε ζευγάρια
xh=[xh[x:x+2] για x στην περιοχή(0,len(xh),2)]
ab=[ab[x:x+2] για x στην περιοχή (0,len(ab),2)]
xs=[xs[x:x+2] για x στην περιοχή (0,len(xs),2)]
 
lm=[]
για n στην περιοχή (len(xh)):
l1=list((min(xh[n]),max(xh[n])))
new_l1=map(str,l1)
l2=list(set(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
 
#removeduplication
finall_ls=[]
για l στο finall_list:
αν δεν είμαι στα finall_ls:
finall_ls.append(l)
 
#Δημιουργήστε ξανά το DataFrame με βάση τη λίστα αποτελεσμάτων
df_3=pd.DataFrame(data=final_ls,columns=['σειριακός αριθμός','όνομα τμήματος οπτικού καλωδίου (τέλος Α-άκρο Β)'])
df_3.set_index('σειριακός αριθμός',drop=True,inplace=True)#Ορίστε τη στήλη σειριακού αριθμού ως ευρετήριο
 
 
#Συνδέστε το τμήμα οπτικού καλωδίου χωρίς JT και το επεξεργασμένο τμήμα με JT
cf=pd.concat([df_1,df_3],axis=0)
 
 
'''
Είναι εντάξει να αντικαταστήσετε ξανά το ευρετήριο ή να μην το αντικαταστήσετε. Τέλος πάντων, ο αριθμός γραμμής βασίζεται στον σειριακό αριθμό + 2
'''
 
#pywin32Διαβάστε τον πίνακα excel
#Εκτέλεση προγράμματος excel
δοκιμάστε:
excel_app = win32.gencache.EnsureDispatch('Excel.Application')
εκτός:
δοκιμάστε:
win32.gencache.EnsureDispatch('et.Application')
εκτός:
win32.gencache.EnsureDispatch('ket.Application')
τελικά:
excel_app.Visible = Αληθινό
excel_app.DisplayAlerts = False
#Διαβάστε τις απαιτούμενες στήλες του πίνακα
βιβλίο εργασίας = excel_app.Workbooks.Open(fp)
φύλλο εργασίας = βιβλίο εργασίας. Φύλλα εργασίας ('λίστα')
φύλλο εργασίας.Στήλες(3).Εισαγωγή()
φύλλο εργασίας.Στήλες(4).Εισαγωγή()
φύλλο εργασίας.Κελιά(2, 3).Τιμή = 'Αριθμός σχεδίου'#Ορισμός ονόματος στήλης
φύλλο εργασίας.Cells(2, 4).Value = 'Όνομα παραγράφου'#Ορισμός ονόματος στήλης.
 
#Φόρμα λειτουργίας
για idx,row στο cf.iterrows():
dl=row['Όνομα τμήματος οπτικού καλωδίου (τέλος Α-άκρο Β)']
bh=idx
εάν '-' σε str(bh):
sb=bh.split('-')
start_row=int(min(sb))+2#Αριθμός σειράς έναρξης
end_row=int(max(sb))+2#Αριθμός τέλους σειράς
range1_to_merge=worksheet.Range(worksheet.Cells(start_row, 3), worksheet.Cells(end_row, 3))#Ο "αριθμός σχεδίασης" του κελιού που πρόκειται να συγχωνευτεί
range2_to_merge=sheet.Range(worksheet.Cells(start_row, 4), worksheet.Cells(end_row, 4))#"Όνομα παραγράφου" του κελιού που πρόκειται να συγχωνευτεί
range3_to_color=φύλλο εργασίας.Range(φύλλο εργασίας.Κελιά(start_row, 5), worksheet.Cells(end_row, 5))#The "optical cable section name (end A-end B)" για να ορίσετε το χρώμα
range4_to_color=φύλλο εργασίας.Εύρος(φύλλο εργασίας.Κελιά(start_row, 17), worksheet.Cells(end_row, 17))#Ο "αριθμός παραγγελίας + αιτητής" για να ορίσετε το χρώμα
range2_to_merge.WrapText = True#Αυτόματη αναδίπλωση γραμμών
range3_to_color.Interior.Color =7396243 # Ανοιχτό κόκκινο χρώμα γεμίσματος 804040
range4_to_color.Interior.Color =7396243
#range3_to_merge.Font.Color = 25500 # Σκούρο κόκκινο κείμενο
range1_to_merge.Value=bh#Αριθμός σχεδίασης
range2_to_merge.Value=dl#Παράγραφος οπτικού καλωδίου
range1_to_merge.Merge()
range2_to_merge.Merge()
range2_to_merge.Rows.RowHeight=36
range2_to_merge.Columns.ColumnWidth = 34
αλλού:
φύλλο εργασίας.Κελιά(idx+2,3).Τιμή = idx
φύλλο εργασίας.Κελιά(idx+2,4).Τιμή = dl
φύλλο εργασίας.Cells(idx+2,4).WrapText = True#Automatically wrap lines
 
 
#Τερματίστε τη λειτουργία και αποθηκεύστε τη φόρμα
βιβλίο εργασίας.Αποθήκευση()
βιβλίο εργασίας.Close(SaveChanges=False)
excel_app.Quit()