import pandas as pd
import customtkinter as ctk
from tkinter import filedialog, messagebox
import os
# Função para fazer upload do arquivo
def upload_file():
global df
file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx"),("csv files", "*.csv"),("All files", "*.*")])
if file_path:
try:
df = pd.read_excel(file_path)
messagebox.showinfo("Success", f"Arquivo {file_path} carregado com sucesso!")
except Exception as e:
messagebox.showerror("Error", f"Erro ao carregar o arquivo: {e}")
else:
messagebox.showwarning("Warning", "Nenhum arquivo selecionado.")
# Função para processar o arquivo
def process_file():
global df
if df is not None:
try:
# Drope as colunas indesejadas
dropandocolumns = ['REGIAO','WORKFLOW','LINHA_PRODUCAO','GEOGRAFIA','GRA_A','GRA_B','EST_A','EST_B','AREA_MARKETING','NUM_PROT_ANATEL_CLARIFY','OS_CLARIFY','LOCAL','NUM_MEIO_ACESSO','SEGMENTO','SEGMENTO_CLIENTE','SEGMENTO_POSICIONAMENTO',
'CNPJ_14','CNPJ_08','CNPJ_08_UF','NOME_CLIENTE','NOME_CDC','NOME_CONG','SERVICO','SIGLA_PRODUTO','DESC_PRODUTO','VELOCIDADE','COD_PEND_CANCEL','DESC_PEND',
'SIGLA_POSTO','TAREFA_OMS','OBS_PEND_OMS','DESC_LIVRE_ABERTURA','DATA_ABERTURA','DATA_PROMESSA_ORI','DATA_PRIMEIRO_APRAZAMENTO','DATA_ULTIMO_APRAZAMENTO','PRAZO_OS','TEMPO_OS','TEMPO_APZ_ORI',
'FAIXA_IDADE','FAIXA_RESP','NUM_CIRCUITO','NUM_PROT_ANATEL_CPE','CIR_CPE','DESCRICAO_CPE','TIPO_CPE','KIT_CPE','FABRICANTE_CPE','PEND_CIR_CPE','STATUS_CIR_CPE','QTDE_APZ',
'ID_TBL_PROJETO','PROJETOS','NUM_IDENT_PEP_CLIENTE','NUM_PEP_PREFIXO','NUM_PEP_SUBORDINADO','ENDERECO_PONTA_A','ENDERECO_PONTA_B','CEP_PONTA_A','CEP_PONTA_B','UF_PONTA_B',
'SEA_DONO','COD_SFA','PERM_TEMP','REGIONAL','MINIRREGIONAL','DV','GV','EN','N4','N5','EA','N5_ENTREGA','GE_GP','RECEITA','ORIGEM_RECEITA','JUSTIFICA_RECEITA','VALOR_DESC',
'FLAG_RECEITA','TOTAL_PROJETO_CAPEX','STATUS_CAPEX','CARACTERISTICA_TECNOLOGIA','MANCHA_GPON','ID_PIPE','ID_PIPE_PRODUTOS','ACAO_COMERCIAL','ID_POL','ID_PAC',
'OCORREU_PORTABILIDADE','CORONAVIRUS','MOTIVO_LINHA','MOTIVO_RETIRADA','LOB','SOV','PRAZO_CONTRATUAL','TERCEIRO','REGRA_ID']
df = df.drop(columns=dropandocolumns)
# Filtre o DataFrame para múltiplos nomes na coluna 'BKO'
produto = ['Data','Digitronco','Ip Connect','Vpn Vip']
unidade_de_negocios = ['ATA','CORP','EMP']
perimetro = ['INFRACO', ' ']
responsavel = ['Aprov. Investimento','Aprov. Investimento - GDE','Lib. Investimento']
sigla_servico = [' ','SUBMCPE','SERINT','RETMTRO','RETMPAC','RETLINK','RETINET','RETFWAY','RETEVC','RETEILD','RETCPE','RETCIRC','RETBLOQ','RECONFG','MUDINTB','MUDINTA','MUDEXT','MIGVRF','INSMTRO','INSLINK','INSINET','INSEILD','INSCPE','INSCIRC','ATIVTEC','ALTTAC','ALTFIOB','ALTFIOA','ALTEIP','ALTCTEC','ALTCONF']
df = df.loc[
(df['PRODUTO'].isin(produto)) &
(df['UNIDADE_DE_NEGOCIOS'].isin(unidade_de_negocios)) &
(df['PERIMETRO'].isin(perimetro) | df['PERIMETRO'].isna()) &
(df['RESPONSAVEL'].isin(responsavel)) &
(df['SIGLA_SERVICO'].isin(sigla_servico) | df['SIGLA_SERVICO'].isna())
]
messagebox.showinfo("Success", "Arquivo processado com sucesso!")
except Exception as e:
messagebox.showerror("Error", f"Erro ao processar o arquivo: {e}")
else:
messagebox.showwarning("Warning", "Nenhum arquivo carregado.")
# Função para salvar o arquivo processado
def save_file():
global df
if df is not None:
try:
file_path = filedialog.asksaveasfilename(defaultextension=".xlsx",
filetypes=[("Excel files", "*.xlsx"),
("All files", "*.*")])
if file_path:
df.to_excel(file_path, index=False)
messagebox.showinfo("Success", f"Arquivo salvo como {file_path}")
else:
messagebox.showwarning("Warning", "Salvamento cancelado.")
except Exception as e:
messagebox.showerror("Error", f"Erro ao salvar o arquivo: {e}")
else:
messagebox.showwarning("Warning", "Nenhum arquivo processado para salvar.")
# Configuração da interface gráfica
janela = ctk.CTk()
janela.title("Editor de Arquivos Excel")
janela.geometry("400x300")
df = None
# Adicionando um rótulo acima dos botões
rotulo_titulo = ctk.CTkLabel(janela, text="Processador e Filtro de Arquivos", font=("Arial", 16))
rotulo_titulo.pack(pady=20)
# Botão para upload do arquivo
botao_upload = ctk.CTkButton(janela, text="Upload Arquivo", command=upload_file)
botao_upload.pack(pady=10)
# Botão para processar o arquivo
botao_processar = ctk.CTkButton(janela, text="Processar Arquivo", command=process_file)
botao_processar.pack(pady=10)
# Botão para salvar o arquivo
botao_salvar = ctk.CTkButton(janela, text="Salvar Arquivo", command=save_file)
botao_salvar.pack(pady=10)
# Execução da janela
janela.mainloop()