моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
импортировать панды как pd
импорт ре
импортировать win32com.client как win32
из win32com.client импорт констант
импортировать ос
импортировать os.path как osp
#Читать таблицу
путь=os.getcwd()
fp=osp.join(путь,'fuck_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['серийный номер','имя секции оптического кабеля (конец A-конец B)'],nrows=72)#Не забывайте nrows
df.set_index('серийный номер',inplace=True)#Установить индекс
#Фильтрация данных
df_1=df[~df['Имя секции оптического кабеля (конец A-конец B)'].str.contains('JT01')]
df_2=df[df['Имя секции оптического кабеля (конец A-конец B)'].str.contains('JT01')]
#Ссылка на операцию df_2 данных
reg=re.compile(r'(?<=()(.*?)(?=))')
pf=df_2.копировать()
pf['Извлечь конец AB']=pf['Имя секции оптического кабеля (конец A-B)'].str.extract(reg,expand=False)
pf['Количество жил оптического кабеля']=pf['Имя секции оптического кабеля (конец A-конец B)'].str.extract(r'(?:.*)(-d+)',expand=False)
pf=pf.iloc[::-1]#Обратный порядок, ключ
pf['Количество жил оптического кабеля'] = pf['Количество жил оптического кабеля'].replace('-', '', regex=True)#replace
#Обработка данных
лс=[]
для idx,row в pf.iterrows():
strs_2=row['Имя секции оптического кабеля (конец A-конец B)']
strs_3=row['Извлечь конец AB']
strs_4=row['Количество жил оптического кабеля']
если strs_3 в strs_2:
ls.append([idx,strs_3,strs_4])
lg=[]#Storage: текущий элемент равен предыдущему элементу и не равен следующему элементу
lf=[]#Хранение двух элементов до и после не равны
для i в диапазоне (len(ls)):
если ls[i][1]==ls[i-1][1] и ls[i][1]!=ls[i+1][1]:
лт=лс[i-1:i+2]
l1=[]#Номера хранилищ
l2=[]#Терминал магазина AB
l3=[]#Хранение количества жил оптического кабеля
для 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=список(набор(l2))+список(набор(l3))
res_1='-'.join(new_l1)#объединение серийных номеров
res_2='-'.join(new_l2)#Сращивание числа жил оптического кабеля на конце AB
res_3=list((res_1,res_2))#Преобразовать в список
lg.append(res_3)
еще:
l1=ls[i][0]#хранить номера
l2=ls[i][1]#сохранить конец AB
l3=ls[i][-1]#хранение количества жил оптического кабеля
res_4=список((l1,l2,l3))
lf.append(res_4)
xh=[]#серийный номер
ab=[]#ab конец
xs=[]#количество ядер
для k в диапазоне (len(lf)):
l1=lf[k][0]#номера магазинов
l2=lf[k][1]#сохранить конец AB
l3=lf[k][-1]#хранение количества жил оптического кабеля
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)]
лм=[]
для n в диапазоне (len(xh)):
l1=список((мин(xh[n]),макс(xh[n])))
new_l1=карта(стр,l1)
l2=список(набор(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
final_ls=[]
для l в final_list:
если я не в finall_ls:
finall_ls.append(l)
#Воссоздайте DataFrame на основе списка результатов
df_3=pd.DataFrame(data=final_ls,columns=['серийный номер','имя секции оптического кабеля (конец A-конец B)'])
df_3.set_index('serial Number',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.Приложение')
кроме:
пытаться:
win32.gencache.EnsureDispatch('et.Application')
кроме:
win32.gencache.EnsureDispatch('ket.Application')
окончательно:
excel_app.Visible = True
excel_app.DisplayAlerts = Ложь
#Читаем нужные столбцы таблицы
рабочая книга = excel_app.Workbooks.Open(fp)
рабочий лист = рабочая книга.Рабочие листы('список')
рабочий лист.Столбцы(3).Вставить()
рабочий лист.Столбцы(4).Вставить()
worksheet.Cells(2, 3).Value = 'Номер чертежа'#Установить имя столбца
worksheet.Cells(2, 4).Value = 'Имя абзаца'#Установить имя столбца.
#Форма операции
для idx,row в cf.iterrows():
dl=row['Имя секции оптического кабеля (конец A-конец B)']
бх=идх
если '-' в 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=worksheet.Range(worksheet.Cells(start_row, 4), worksheet.Cells(end_row, 4))#"Имя абзаца" ячейки, подлежащей объединению
range3_to_color=worksheet.Range(worksheet.Cells(start_row, 5), worksheet.Cells(end_row, 5))#"Имя секции оптического кабеля (конец A-конец B)" для установки цвета
range4_to_color=worksheet.Range(worksheet.Cells(start_row, 17), worksheet.Cells(end_row, 17))#"Номер заказа + запрашивающая сторона" для установки цвета
range2_to_merge.WrapText = True#Автоматически переносить строки
range3_to_color.Interior.Color =7396243 # Светло-красный цвет заливки 804040
диапазон4_до_цвета.Интерьер.Цвет =7396243
#range3_to_merge.Font.Color = 25500 # Темно-красный текст
range1_to_merge.Value=bh#Номер чертежа
range2_to_merge.Value=dl#Абзац об оптическом кабеле
диапазон1_для_слияния.Объединить()
range2_to_merge.Объединить()
range2_to_merge.Rows.RowHeight=36
range2_to_merge.Столбцы.ШиринаСтолбца = 34
еще:
рабочий лист.Ячейки(idx+2,3).Значение = idx
рабочий лист.Ячейки(idx+2,4).Значение = dl
worksheet.Cells(idx+2,4).WrapText = True#Автоматически переносить строки
#Завершаем операцию и сохраняем форму
рабочая книга.Сохранить()
рабочая книга.Закрыть(SaveChanges=False)
excel_app.Выход()