ChatGPT e Python para Automações no Office! Na aula de hoje eu quero te ensinar como usar o ChatGPT com exemplos práticos!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala impressionadores! Vamos usar o ChatGPT? Você vai descobrir que é muito útil quando você não sabe como escrever um código específico e precisa de ajuda, é claro que precisa saber programação para corrigir os possíveis erros.
Vou construir 3 exemplos para que você possa ver como o ChatGPT pode auxiliar nesse processo e como isso fica mais fácil.
Vamos fazer automações no Office com Python (ou seja, automações no Office com ChatGPT).
Dentre essas automações vamos enviar arquivo pelo Outlook com Python, construir slide com ChatGPT usando Python e Editar arquivo em Excel com ChatGPT.
Nesses casos vamos ter que fazer alguns ajustes, até porque o ChatGPT é uma inteligência artificial e nem sempre vai trazer uma resposta que funcione 100%, sendo necessário algum conhecimento em Python para fazer os ajustes.
E aí, bora aprender como usar o ChatGPT para te auxiliar na programação em Python?
Vamos utilizar uma base de dados que está disponível no material da aula para você, neta temos uma tabela com alguns dados e um gráfico.
Com esta base podemos fazer diversas automatizações, mas vamos partir do princípio de que não sabemos qual código usar para isso.
É aqui que entra o ChatGPT, uma ferramenta onde podemos obter códigos, neste site vamos fazer uma pergunta no local de pesquisa, o site então, vai responder à questão de acordo, fornecendo um passo a passo de como chegar ao resultado.
1º Desafio
Enviar a base de dados acima para o e-mail da diretoria da empresa usando o Outlook e Python.
Questão inserida do ChatGPT:
Usando o Python quero enviar um arquivo em Excel para a diretoria da empresa pelo Outlook.
Resposta do site:
O site oferece uma resposta até que bem completa, informa as bibliotecas que devem ser baixadas e informa também que será necessário fazer ajustes, então vamos a eles…
Código:
import win32com.client as win32
# Criando objeto outlook
outlook = win32.Dispatch('outlook.application')
# Criando e-mail
email = outlook.CreateItem(0)
email.To = '[email protected]'
email.Subject = 'Relatório de vendas'
email.Body = 'Segue em anexo o relatório de vendas do mês.'
# Anexando arquivo em Excel
anexo = r"C:\Users\joaol\Desktop\Videos Youtube\OfficeChatGPT\Produtos.xlsx"
email.Attachments.Add(anexo)
# Enviando e-mail
email.Send()
Caso a biblioteca não esteja instalada do seu Python, segue o comando de instalação:
!pip install pywin32
Obs. Se não estiver no Jupyter, este comando deve ser rodado sem a exclamação no início.
Ajustes – Aqui vamos passar a linha a ser ajustada e o motivo do ajuste logo abaixo:
email.To = '[email protected]'
Adicionados um e-mail no código, pois ele vem com um genérico.
Anexo = r"C:\Users\joaol\Desktop\Videos Youtube\OfficeChatGPT\Produtos.xlsx"
A parte de anexo também vem com um código genérico, apague e coloque o caminho do seu arquivo.
Para obter o caminho do seu arquivo clique sobre ele com o botão direito do mouse e selecione -> Copiar como Caminho.
Observe também que antes do caminho do arquivo existe um “r” (r“C:\Users), colocamos este r para que o Python ignore os caracteres que existem no caminho do arquivo.
Esses caracteres podem ser caracteres especiais no Python, colocando o r ele os ignora.
Feito os ajustes -> clique em Run -> Pronto! Conseguimos enviar o e-mail com o arquivo.
Obs. O envio pode demorar um pouco…
2º Desafio
Agora, vamos para um desafio um pouco mais robusto!
Vamos fazer um código que crie um gráfico utilizando os dados da mesma base de produtos. Neste caso vamos usar as colunas de Produtos e Preço Base Reais.
E ainda vamos incluir no PowerPoint um texto nos informando qual o produto com maior preço.
Questão inserida do ChatGPT:
Código:
!pip install openpyxl
!pip install python-pptx
Requirement already satisfied: openpyxl in c:\users\joaol\anaconda3\lib\site-packages (3.0.10)
Requirement already satisfied: et_xmlfile in c:\users\joaol\anaconda3\lib\site-packages (from openpyxl) (1.1.0)
Requirement already satisfied: python-pptx in c:\users\joaol\anaconda3\lib\site-packages (0.6.21)
Requirement already satisfied: Pillow>=3.3.2 in c:\users\joaol\anaconda3\lib\site-packages (from python-pptx) (9.2.0)
Requirement already satisfied: XlsxWriter>=0.5.7 in c:\users\joaol\anaconda3\lib\site-packages (from python-pptx) (3.0.3)
Requirement already satisfied: lxml>=3.1.0 in c:\users\joaol\anaconda3\lib\site-packages (from python-pptx) (4.9.1)
import openpyxl
from pptx import Presentation
from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
# abre o arquivo Excel
workbook = openpyxl.load_workbook('Produtos.xlsx')
sheet = workbook.active
# lê os dados da tabela
data = []
for row in sheet.iter_rows(min_row=2, max_row=8, values_only=True):
data.append(row)
# encontra o produto com maior preço
max_price = max(data, key=lambda x: x[4])
max_product = max_price[0]
# cria a apresentação
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
chart_data = ChartData()
chart_data.categories = [row[0] for row in data]
chart_data.add_series('Preços', [row[4] for row in data])
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
).chart
chart.has_legend = False
title = slide.shapes.title
title.text = f'O produto com o maior preço é {max_product}'
prs.save('nome_da_apresentacao.pptx')
Ajustes – Aqui vamos passar a linha a ser ajustada e o motivo do ajuste logo abaixo:
workbook = openpyxl.load_workbook('Produtos.xlsx')
É necessário substituir o nome do arquivo genérico do site pelo seu arquivo dentro dos parênteses.
Você deve passar o nome se o código que você está construindo estiver na mesma pasta dos seus arquivos, caso não esteja passe o caminho do arquivo dentro dos parênteses ao invés do nome. Agora só precisamos rodar o código:
3º Desafio
Agora vamos pegar a nossa base de dados e dividi-la em 2 bases, uma base com os Produtos e outra com os Serviços.
Além disso, vamos adicionar uma coluna que traz o total de produtos e o total de serviços.
Questão inserida do ChatGPT:
Eu preciso criar um código em Python que abre um arquivo em Excel e separa ele em 2 outros arquivos, um para os “Produtos” e outro para os “Serviços”
Código:
import pandas as pd
# abre o arquivo Excel
excel_file = pd.read_excel("Produtos.xlsx")
# cria um DataFrame para os produtos
produtos = excel_file[excel_file['Tipo'] == 'Produto']
# cria um DataFrame para os serviços
servicos = excel_file[excel_file['Tipo'] == 'Serviço']
# conta o número de produtos e serviços
qtd_produtos = len(produtos.index)
qtd_servicos = len(servicos.index)
# adiciona a quantidade total de produtos e serviços em uma nova coluna
produtos['Total'] = qtd_produtos
servicos['Total'] = qtd_servicos
# salva os arquivos separados em Excel
produtos.to_excel("produtos_separado.xlsx", index=False)
servicos.to_excel("servicos_separado.xlsx", index=False)
C:\Users\joaol\AppData\Local\Temp\ipykernel_4352\1007437142.py:17: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
produtos['Total'] = qtd_produtos
C:\Users\joaol\AppData\Local\Temp\ipykernel_4352\1007437142.py:18: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
servicos['Total'] = qtd_servicos
Ajustes – Aqui vamos passar a linha a ser ajustada e o motivo do ajuste logo abaixo:
Para este exercício é necessário instalar o Pandas caso você não esteja usando o Jupyter.
# abre o arquivo Excel
excel_file = pd.read_excel("Produtos.xlsx")
É necessário substituir o nome do arquivo genérico do site pelo seu arquivo dentro dos parênteses
produtos = excel_file[excel_file['Tipo'] == 'Produto']
Na parte de Criar um dataframe o site pede para pegar a coluna C -> [excel_file [‘C’] == ‘Produto’], porém desta forma não vai dar certo.
O Pandas quando lê uma base de dados ignora o nome das colunas, ele usa o nome dos cabeçalhos, portanto a coluna C vai ser para o Pandas a coluna Tipo.
# salva os arquivos separados em Excel
produtos.to_excel("produtos_separado.xlsx", index=False)
servicos.to_excel("servicos_separado.xlsx", index=False)
Nesta parte estamos modificando o nome do arquivo para diferenciar do arquivo que se chama “produtos” original, assim não corremos o risco de substituições.
Após esses ajustes conseguimos o objetivo, porém o próprio site informa após rodar o código de que esta, não foi a forma mais eficiente de chegar no resultado. Podendo existir formas mais eficientes.
Nesta aula trouxe 3 exemplos de como buscar resultados no site ChatGPT, este site possui uma inteligência artificial ótima e fornece bons resultados, o ideal é aprender como ter benefícios com ele.
É importante, no entanto, fazer esse tipo de interação com o site, testando de várias formas as perguntas, porque ele é ótimo e eficiente, desde que você consiga fazer os ajustes necessários para cada aplicação.
Como no Google, fazer a pergunta de forma errada vai te trazer uma resposta ineficiente e muitas vezes, fazendo a pergunta certa, o código vem quase 100% pronto, mas você ainda terá que fazer ajustes para adaptar à realidade.
Espero que tenham gostado da aula! Até mais,
Para acessar outras publicações de Python, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.