Blog

Postado em em 16 de março de 2023

ChatGPT e Python para Automações no Office

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!

ChatGPT e Python

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala impressionadores! Vamos usar o ChatGPT e Python? 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.

ChatGPT e Python Automações no Office
exemplo

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:

  • Quero criar um código em Python para criar uma apresentação em PowerPoint a partir de um arquivo de Excel.
  • O arquivo em Excel contém uma tabela com vários produtos em que o nome do produto está na coluna A e o preço do produto está na coluna E.
  • Os dados na tabela do Excel estão nas células A1 até E8
  • A apresentação em PowerPoint deve conter um gráfico mostrando os preços de cada produto e um texto dizendo qual o produto com o maior preço da tabela.
  • Todos os números do arquivo em Excel estão usando vírgula como separador decimal.

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:

resultado
resultado

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

  • As informações do arquivo em Excel estão nas células A1 até E8. A primeira linha contém cabeçalhos.
  • A coluna que diz se aquele registro é um Produto ou Serviço é a coluna C.
  • Também preciso que cada arquivo final contenha na célula G2 a quantidade total de itens que aquele arquivo possui.

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.

Conclusão – ChatGPT e Python Automações no Office

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,

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador