Olá, tudo bem? ▶ Playlist Completa: ua-cam.com/play/PLpA7pYbYtZSZFH9TqDRRAQaGWArzbXkjX.html Informações Úteis: - A documentação do Apps Script pra planilhas: developers.google.com/apps-script/reference/spreadsheet - O código Apps Script que apresentei no vídeo está no repositório Git do canal: github.com/baquetachannel/google-planilha-agenda/blob/main/main.gs - Planilha Compartilhada (Copie para o seu Drive): docs.google.com/spreadsheets/d/177-I5N7tQ1X6k2PPCU__NFVnmOnEQdoll3E8XjxrIBg Abraço e valeu pela força!
Obrigado pela aula. Uma dúvida: caso eu mude a data de eventos já criados ou qualquer coisa neles (descrição, etc), ele vai duplicar ou atualizar os eventos?
@@gabrielg_faria olá Gabriel, desculpa a demora, o UA-cam não me notificou do seu comentário. Acredito que já tenha encontrado a resposta, mas, caso não: pro código que mostrei, se você mudar a data e alterar o valor da célula SINCRONIZADO correspondente pra algo diferente de "sim", ele vai criar o evento na nova data e manter o anterior, ou seja, duplica. Pra isso não acontecer é preciso implementar a lógica de edição, você pode registrar o id do evento numa nova coluna e utilizar ele pra editar/remover o evento criado previamente. Exemplo: 1) criar uma coluna depois da sincronizado, exemplo: "ID Evento" , pra salvar o identificador do evento lá na planilha. 2) criar uma função onEdit, pra ser executada toda vez que alguém editar a planilha. Exemplo: ### function onEdit(e) { const colunaSincronizado = 9; var pagina = e.source.getActiveSheet(); var colunaModificada = e.range.getColumn(); var linhaModificada = e.range.getRow(); if (colunaModificada != colunaSincronizado) { pagina.getRange(linhaModificada, colunaSincronizado).setValue("Não"); } } ### 2) Adaptar o código criarEventos inicial pra não duplicar eventos na agenda, exemplo: OBS.: o código novo tá marcado com [NOVO], só dar um CTRL + F :) ### function criarEventos () { var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var valores = planilha.getDataRange().getValues(); var agenda = CalendarApp.getDefaultCalendar(); for (var i = 1; i < valores.length; i++) { var linha = valores[i]; var sincronizado = linha[8]; if (sincronizado.toLowerCase() !== "sim") { var dia = linha[0]; var horaInicio = linha[1]; var horaFim = linha[2]; var titulo = linha[3]; var descricao = linha[4]; var prioridade = linha[6]; var idEvento = linha[9]; // [NOVO] LE A NOVA COLUNA IDEVENTO // Formata data início e fim var dataInicio = new Date(dia); var dataFim = new Date(dia); dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]); dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]); // Configura Cor do evento de acordo com prioridade var cor; switch (prioridade) { case "Alta": cor = CalendarApp.EventColor.RED; break; case "Média": cor = CalendarApp.EventColor.YELLOW; break; case "Baixa": cor = CalendarApp.EventColor.GREEN; break; default: cor = CalendarApp.EventColor.BLUE; } // [NOVO: 4 LINHAS A SEGUIR] // Se o evento já foi criado antes, remove antes de criar o novo if (idEvento !== "") { agenda.getEventById(idEvento).deleteEvent(); } // Cria evento na Google Agenda var evento = agenda.createEvent(titulo, dataInicio, dataFim, {description: descricao}); evento.setColor(cor); // Atualiza coluna ID Evento planilha.getRange(i + 1, 10).setValue(evento.getId()); // [NOVO] // Atualiza coluna sincronizado planilha.getRange(i + 1, 9).setValue("Sim"); } } } ### Espero que ajude, Valeu!
Olá, @carlosbaqueta Já me inscrevi no canal e estou me divertindo com as possibilidades incentivadas por você. Obrigada! Ainda sobre a integração da planilha com a agenda, como faríamos para excluir eventos??🥰
Preciso saber uma coisa, posso usar este mesmo código para realizar este mesmo intuito em outra planilha (planilha de eventos) com a mesma intenção mas criada com caracteres e palavras diferentes
MANO VC É O CARA!!!! PLANILHA JÁ FUNCIONANDO A MIL. SERVICO COMPLETO, RAPIDO, COMPARTILHOU PLANILHA NA MORAL AINDA É BOA PINTA E SORRIDENTE. SÓ APLAUSOS PRA TI. ABS DO RIO GRANDE DO SUL
Obrigado pelo vídeo. Boa didática. Tenho umas perguntas: - Tem como atualizar um evento ja cadastrado? - Tem como fazer a sincronização inversa, ou seja, editando no calendar, editar a planilha?
Valeu! - Tem como atualizar um evento ja cadastrado? Tem sim, você pode guardar o ID dele na planilha logo depois que criar e usar no código. Exemplo: 1) criar uma coluna depois da sincronizado, exemplo: "ID Evento" , pra salvar o identificador do evento lá na planilha. 2) criar uma função onEdit, pra ser executada toda vez que alguém editar a planilha. Exemplo: ### function onEdit(e) { const colunaSincronizado = 9; var pagina = e.source.getActiveSheet(); var colunaModificada = e.range.getColumn(); var linhaModificada = e.range.getRow(); if (colunaModificada != colunaSincronizado) { pagina.getRange(linhaModificada, colunaSincronizado).setValue("Não"); } } ### 2) Adaptar o código criarEventos inicial pra não duplicar eventos na agenda, exemplo: OBS.: o código novo tá marcado com [NOVO], só dar um CTRL + F :) ### function criarEventos () { var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var valores = planilha.getDataRange().getValues(); var agenda = CalendarApp.getDefaultCalendar(); for (var i = 1; i < valores.length; i++) { var linha = valores[i]; var sincronizado = linha[8]; if (sincronizado.toLowerCase() !== "sim") { var dia = linha[0]; var horaInicio = linha[1]; var horaFim = linha[2]; var titulo = linha[3]; var descricao = linha[4]; var prioridade = linha[6]; var idEvento = linha[9]; // [NOVO] LE A NOVA COLUNA IDEVENTO // Formata data início e fim var dataInicio = new Date(dia); var dataFim = new Date(dia); dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]); dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]); // Configura Cor do evento de acordo com prioridade var cor; switch (prioridade) { case "Alta": cor = CalendarApp.EventColor.RED; break; case "Média": cor = CalendarApp.EventColor.YELLOW; break; case "Baixa": cor = CalendarApp.EventColor.GREEN; break; default: cor = CalendarApp.EventColor.BLUE; } // [NOVO: 4 LINHAS A SEGUIR] // Se o evento já foi criado antes, remove antes de criar o novo if (idEvento !== "") { agenda.getEventById(idEvento).deleteEvent(); } // Cria evento na Google Agenda var evento = agenda.createEvent(titulo, dataInicio, dataFim, {description: descricao}); evento.setColor(cor); // Atualiza coluna ID Evento planilha.getRange(i + 1, 10).setValue(evento.getId()); // [NOVO] // Atualiza coluna sincronizado planilha.getRange(i + 1, 9).setValue("Sim"); } } } ### - Tem como fazer a sincronização inversa, ou seja, editando no calendar, editar a planilha? Sim, é uma lógica parecida com esse vídeo aqui: ua-cam.com/video/Giec8XfGiaQ/v-deo.htmlsi=_8SHC0-eKJZRrIXp Espero que ajude, qq coisa me fala. Valeu!
Irmão, eu fico tão feliz em ver programação e gostaria muito de aprender, não faço ideia de como começar. Aguardo o seu vídeo de programação básica. Sucesso!
Que legal Helber, vou planejar algo nesse sentido. Tem várias formas de estudar esses assuntos hoje, até mesmo pelo próprio YT. Mas às vezes tem tanta informação que a gente não sabe por onde começar né. Pensando em utilidade, Eu acho que é legal quando você busca formas de resolver os problemas no seu trabalho, por exemplo, utilizando tecnologia e ir aprendendo no caminho. Valeu !
Muito obrigado! Então, está nos meus planos sim, não sei ainda o tema. Quero fazer algo que realmente ajude e seja útil. Vou continuar postando aqui e ouvindo vocês no que mais precisam e vamos construindo o projeto. Obrigado e valeu pela força!
Fala, Baqueta! Antes de tudo, grato pelo ótimo conteúdo! Daí, a questão é: tem como ter "dia início e dia fim"? Trabalho como coordenador de produção de eventos artísticos e pro cronograma da equipe seria fundamental ter essa duas informações. Desde já, agradeço. Abraço.
Muito obrigado, Jonathas! Tem sim, no seu caso o mais simples seria trocar as 3 primeiras colunas (data, hora inicial e hora final) por apenas 2 do tipo Data Hora: Data Inicial: ex 2024-08-10 13:00 Data final: ex. 2024-08-11 16:00 Daí no código, seria até mais simples, só ler as colunas direto , sem formatar. Espero que ajude, valeu!
@carlosbaqueta Meus parabéns pelo conteúdo e principalmente pela didática, incrível a tranquilidade e a serenidade da sua fala, de longe uma das minhas melhores descobertas no YT em 2024. Amigo tenho uma dúvida e para apagar eventos da agenda ao deletarmos uma linha da planilha, existe como? Abraços e mais uma vez meus parabéns.
Muitíssimo obrigado pelo seu comentário, deu um empurrão positivo aqui! Tem sim. Pra remover o evento da agenda precisamos primeiro gravar o ID (IDentificador) dele na planilha e utilizar esse ID pra apagar da agenda. Ideia de implementação mais simples: 1) Crie uma coluna pra guardar o ID do evento, exemplo: "ID Evento" 2) Mude a lógica da coluna Sincronizado. Vamos renomear ela para "Status Sincronização". Ao invés de guardar somente se o evento foi sincronizado ou não, vamos expandir pra adicionar outras possibilidades. Os valores possíveis pra ela agora seriam: NAO_SINCRONIZADO, SINCRONIZADO e A_EXCLUIR. Dica: adicione uma regra de validação pra permitir só esses valores. 3) No script, precisamos implementar a lógica de remoção de eventos. Confira esse exemplo: developers.google.com/apps-script/reference/calendar/calendar-event?hl=pt-br#deleteevent 4) Pra acionar o código, temos 2 opções aqui: 1) podemos colocar junto no codigo de sincronização ou 2) criar um novo botão pra fazer isso na interface. Acho que a 2 fica melhor, pq separa as 2 operações e facilita pra quem está utilizando. Você pode conferir como criar um botão no menu nesse vídeo: ua-cam.com/video/nH0u4-QOKU8/v-deo.html Espero que te ajude! Vou gravar um video respondendo as dúvidas logo mais. Valeu!
Aula sensacional!!!!! Pra mim tá funcionando perfeitamente. Eu só tenho uma variável que preciso. É que essa planilha é compartilhada com o time. Como eu faço para adicionar apenas as minhas tarefas? E que meu time consiga puxar apenas as tarefas deles?
Valeu demais! Nesse caso, o melhor é separar por agenda. Na Google agenda você pode criar as agendas dos times e a sua. No código você pode fazer uma checagem pra cada linha/tarefa pra selecionar a agenda correta e criar nela. Na tabela também é importante ter alguma coluna pra dizer em qual agenda salvar. Daí no código é só utilizar ela na checagem. Espero que ajude, valeu
Que conteúdo incrível, Carlos! Parabéns. Gostaria de saber se é possível a criação de eventos que sejam recorrentes, como por exemplo uma reunião que acontece toda semana no mesmo horário, ou todo dia no mesmo horário
Muito obrigado,Patrícia ! Sim é possível, você precisa criar os eventos de uma forma diferente, createEventSeries , passando a regra de recorrência, confere aqui: developers.google.com/apps-script/reference/calendar/calendar#createeventseriestitle,-starttime,-endtime,-recurrence Espero que ajude! Valeu
Antes de tudo gostaria de parabeniza-lo pelo ótimo vídeo, Carlos. No entanto, surgiu um questionamento: é possível adicionar convidados ao evento, dessa forma automatizada, se eu criar uma coluna adicional com o e-mail deles no google planilhas?
Muito obrigado pela força! Sim, é possível. O parâmetro options aceita adicionar mais parâmetros, como convidados (guests) e localização. Vou passar um exemplo pra você, antes de chamar o createEvent() faça: --------- // Ler os e-mails da planilha (Mude a linha a seguir pra ler os emails das colunas da sua planilha) var convidados = "exemplo1@gmail.com, exemplo2@gmail.com"; // Cria o objeto options com os parâmetros. var options = { description: descricao, guests: convidados, sendInvites: true // Pra enviar os e-mails para os convidados } // Cria o evento no calendário var evento = calendar.createEvent(titulo, dataInicio, dataFim, options); ----------- Documentação: developers.google.com/apps-script/reference/calendar/calendar#createEvent(String,Date,Date,Object) Espero que ajude, qualquer coisa chama aqui. Valeu!
@@carlosbaqueta cheguei na duvida do colega ai em cima e gostaria de saber onde eu colocar essas linhas, consegui fazer todo codigo do seu video funcionar mas queria de fato adicionar convidados e não to conseguindo, vocÊ pode me ajudar?? desde ja grato!
@@guilkungfu Olá, tranquilo, vamos lá: Primeiro você precisa ler o campo da sua tabela que tem os emails dos convidados, cheque se está conseguindo ler corretamente utilizando o comando Logger.log(convidados) ; Aqui é importante que os emails estejam separados por vírgula como eu coloquei aqui: // Ler os e-mails da planilha (Mude a linha a seguir pra ler os emails das colunas da sua planilha) var convidados = "exemplo1@gmail.com, exemplo2@gmail.com"; Depois que você leu os convidados corretamente: - Adicione esse codigo na linha que chamamos o calendar.createEvent 1) Tira essa linha: 2) cola no lugar essas: // Cria o objeto options com os parâmetros. var options = { description: descricao, guests: convidados, //
@@carlosbaqueta@carlosbaqueta meu caro ta aparecendo alguns erros ja tentei refazer ela do zero 3 vezes mas ainda apresenta que o calendar is not defined, depois fala do metodo e.source não ser reconhecido eu não sei mais o que fazer rsrsrsrs se quiser eu te mando minha planilha e a lista de codigos confesso a tu que é desmotivante mas sigo na luta veja meu codigo embaixo esse dai ele ta funcionando tudo certo só preciso colocar os convidados, mas ta osso: function onEdit(e) { const colunaSincronizado = 7; var pagina = e.source.getActiveSheet(); var colunaModificada = e.range.getColumn(); var linhaModificada = e.range.getRow();
if (colunaModificada != colunaSincronizado) { pagina.getRange(linhaModificada, colunaSincronizado).setValue("Não"); } } function criarEventos () { var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var valores = planilha.getDataRange().getValues(); // Acessa a agenda padrão da conta. Pra acessar outra, chame o método CalendarApp.getCalendarById('ID_DA_AGENDA') var agenda = CalendarApp.getCalendarById('guilkungfu@gmail.com') for (var i = 1; i < valores.length; i++) { var linha = valores[i]; var sincronizado = linha[6]; if (sincronizado.toLowerCase() !== "sim") { var dia = linha[1]; var titulo = linha[2]; var horaInicio = linha[3]; var horaFim = linha[4]; var prioridade = linha[5]; var idEvento = linha[7] var options = linha[8];
// Formata data início e fim var dataInicio = new Date(dia); var dataFim = new Date(dia); dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]); dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]); // Configura Cor do evento de acordo com prioridade var cor; switch (prioridade) { case "Alta": cor = CalendarApp.EventColor.RED; break; case "Média": cor = CalendarApp.EventColor.YELLOW; break; case "Baixa": cor = CalendarApp.EventColor.GREEN; break; default: cor = CalendarApp.EventColor.BLUE; } // [NOVO: 4 LINHAS A SEGUIR] // Se o evento já foi criado antes, remove antes de criar o novo if (idEvento !== "") { agenda.getEventById(idEvento).deleteEvent(); } // Cria evento na Agenda var evento = agenda.createEvent(titulo, dataInicio, dataFim, options); evento.setColor(cor); // Atualiza coluna ID Evento planilha.getRange(i + 1, 8).setValue(evento.getId()); // [NOVO] // Atualiza coluna sincronizado planilha.getRange(i + 1, 7).setValue("Sim"); } } }
Vídeo objetivo e muito bom! Parabéns! Consigo incluir uma condição para dias da semana e horários disponíveis? Não sei se fui clara, mas gostaria de disponibilizar o preenchimento da planilha com base na minha disponibilidade.
Muito obrigado! Pensando aqui, talvez você não precisa utilizar uma planilha, me corrija se estiver errado, por favor. Você já utilizou a função agendamento do próprio Google Agenda? Quando você vai na sua agenda e clica pra criar um evento vai aparecer um botão: Agendamento de horários. Você pode clicar nele e configurar seus horários disponíveis. Ele vai gerar uma página com esses horários que você pode compartilhar com quem precisa agendar horários com você. Espero ter ajudado, qualquer coisa, só chamar aqui :) Valeu!
@@carlosbaqueta é a solução que eu utilizo, mas preciso de um relatório com os campos do formulário que crio dentro do agendamento para apresentação do uso do laboratório que administro aos meus superiores.
Olá, tudo bem? Parabéns pelo ótimo conteúdo e qualidade do vídeo e instrução! Eu gostaria de saber como faço se eu quiser os eventos na opção de "dia inteiro", é possível? Abs
Olá, muito obrigado! Você pode utilizar o método createAllDayEvent ao invés do createEvent da agenda para esses casos. Se a sua planilha tiver os eventos de hora normais também você precisa fazer uma checagem (if) dentro do código pra saber se precisa criar o evento de dia inteiro ou normal. Espero que ajude, Valeu!
Olá @carlosbaqueta, obrigada pelo ensinamento. Pode me tirar uma dúvida se possível? Criei um código para minha agenda seguindo seu passo a passo, porém sem o campo "horário" de início e término. Porém, ao ativar o código, ele aparece na agenda como a data anterior que coloquei na planilha. O que poderia ser? E qual seria o modo de limpar a agenda para testar a questão da sincronização? Muito obrigada,
Muito obrigado! Essa parece ser um problema de fuso horário. Cheque qual fuso horário está configurado na agenda que você está tentando criar os eventos e veja se é o mesmo utilizado no Google Sheets/Apps Script que está executando a integração. Valeu!
Muito obrigado! É só seguir esse passo a passo aqui: Como Criar Eventos Numa Agenda Específica ua-cam.com/video/jVwHelbCO5I/v-deo.html Espero que ajude Valeu!
Muito obrigado! Nesse caso, você precisa criar uma série de eventos. Aqui tem um exemplo de como fazer: developers.google.com/apps-script/reference/calendar/calendar-app?hl=pt-br#createeventseriestitle,-starttime,-endtime,-recurrence
Oi, muitíssimo obrigado, valeu demais pela força! :) Pra adicionar numa agenda específica, você precisa fazer 1 modificação: ao invés de chamar o método getDefaultCalendar(), substitua a linha correspondente por essa: var agenda = CalendarApp.getCalendarById('ID_DA_SUA_AGENDA'); O ID_DA_SUA_AGENDA você encontra acessando a página de configurações: > Clica no ícone engrenagem no topo direito > Clica em Configurações > Na barra lateral esquerda, vai em Configurações das minhas agendas > Clica na agenda que vc quer acessar > Role até a seção Integrar agenda > Encontre o ID da agenda > Copie e substitua no código. Pra ajudar, essa é a documentação oficial: developers.google.com/apps-script/reference/calendar/calendar-app?hl=pt-br#getCalendarById(String) Espero ter ajudado, abraço!
@@carlosbaqueta Como adiciono eventos em múltiplas agendas a partir da mesma planilha? Ou seja, como na mesma planilha eu tenho uma coluna que define a agenda onde será salvo o evento e como fica o script pra fazer isso?
Professor não faço ideia de programação e desses códigos. Poderia incluir o nome da empresa, contato na empresa e telefone? Poderia fazer essa planilha e configurar? Quanto cobraria ?
Top Quero saber se tem como fazer isso direto do wpp numa conversa de um lead com um chatbot de atendimento com IA, onde o lead quisesse marcar uma reunião enfim algum tipo de agendamento e o chatbot verificasse os dias disponíveis na agenda e fornecesse essa informação p ele, e logo após o lead escolher o dia e falar pro chatbot, o chatbot com a IA vai lá no Google agenda e cria um evento
Obrigado! Dá pra fazer uma integração, porém é mais complexo se for fazer ponta a ponta. Uma forma mais simples seria utilizar uma ferramenta de automação, por exemplo, o Zapier (ou alguma outra similar). Valeu!
Olá, professor! Vídeo maravilhoso, já ganhou mais um inscrito. Estou com uma dúvida, caso seja uma planilha do forms, o que deve mudar no código? Obrigada
Olá, muito obrigado! Não deve mudar nada a princípio, a parte do código no Apps Script continua igual. Qualquer coisa escreva um comentário aqui! Valeu
@@carlosbaqueta Professor, fiz o script igual o seu, porém ao executar aparece essa mensagem: TypeError: horaInicio.split is not a function. Como devo proceder?
Olá! Consegui quase tudo que eu precisava. No atual estágio, está me faltando um comando para adicionar duas variáveis em cada um dos campos da agenda, no caso em "titulo" preciso colocar variavel 'nome' e 'numero_registro' juntos, separados por espaço - hifen - espaço. Já no campo "descricao" preciso inserir 'descricao' novo paragrafo 'contatos'. Poderia ajudar nesse ajuste do código. Desde já, grato! Abraço
Olá, valeu! Pro título você pode fazer: var titulo = `${nome} - ${numero_registro}`; Pros contatos, assumindo que estão em colunas na sua planilha, você pode concatenar eles numa string formatada, exemplo: -- var contatos = `${contato1}, ${contato2}, ....`; -- e depois formatar com: -- var descFinal = `${descricao} ${contatos}`; -- * = nova linha Me fala se deu certo depois Valeu!
Muito obrigado, Pedro! Perfeito, vou passar aqui pra você: - A documentação do Apps Script pra planilhas é essa daqui: developers.google.com/apps-script/reference/spreadsheet - O código Apps Script que apresentei no vídeo está no repositório Git do canal: github.com/baquetachannel/google-planilha-agenda/blob/main/main.gs Me conta depois se deu certo, por favor Valeu!
Conteúdo muito bom, parabéns!!! Essa semana surgiu uma necessidade no trabalho de integrar uma planilha de follow-up com o google agenda, acredito que o seu conteúdo irá me ajudar muito. No entanto, tenho uma dúvida, a minha planilha tem 3 colunas de datas (FUP 1, 2 e 3), é possível colocar essas 3 datas para o mesmo título (célula)? Se puder me ajudar eu agradeço. Grato!
Muito obrigado, João! Perfeito, nesse caso eu consigo ver duas possibilidades: 1) Solução mais complexa: você modifica o código dentro do for pra criar os 3 eventos na agenda, ou seja, fazer 3 chamadas para a agenda. Aqui você precisa criar uma data de início e fim pra cada um dos FUPs da sua linha, como são 3, você consegue fazer "triplicando" o código que está lá um pra cada FUP. Porém essa solução vai ser mais fácil de errar na hora de programar. 2) Solução mais simples: você pode modificar a sua planilha pra ter um FUP por linha, ou seja, uma linha sua viraria 3. Se isso for possível, essa solução seria mais simples. Dica: Se não for possível fazer a 2 solução, você pode colar o código inicial no ChatGPT ou no Bard, por exemplo, e pedir pra ele ajustar o código para considerar as 3 colunas de FUP. Depois você pode checar e testar. Caso dê algum erro, você pode utilizar o ChatGPT para te ajudar a encontrar o problema junto com você até funcionar. Espero ter ajudado, qualquer coisa me fala! Valeu!
Muito obrigado! Tem sim, você pode utilizar quantas quiser, basta juntar os valores numa única string/texto. Exemplo: var desc = `${coluna1} ${coluna2} ….`; Ou você pode usar o método .join() também, se preferir. Espero que ajude! Valeu
Muito obrigado! Sim, pra apagar ele você pode seguir uma lógica parecida a que utilizamos nesse vídeo sobre edição de eventos: ua-cam.com/video/nMxGIWW4d6o/v-deo.html A lógica é: 1) guardar o ID do evento na planilha e 2) utilizar esse ID no código pra buscar o evento a ser apagado com getEventById e apagar ele com deleteEvent. Espero que te ajude, qualquer coisa só chamar! Valeu
@@carlosbaquetavc já considerou fazer vídeos sobre appsheet, flutterflow, etc? Essas ferramentas nocode estão bem em alta e vc explica muito bem. Queria, se possível, ver essa integração em appsheet quando vc tiver tempo pra nos mostrar. Ficaria bem bacana, com sua didática.
Muito obrigado! Pra isso você pode utilizar o método createAllDayEvent: developers.google.com/apps-script/reference/calendar/calendar?hl=pt-br#createalldayeventtitle,-startdate,-enddate,-options Espero que ajude, valeu!
Bom dia. Parabéns pela didática. Estou com uma dúvida: de saída, a tua planilha mostra as colunas de hora alinhadas a esquerda, indicando que o conteúdo é entendido como texto. No meu caso, sempre que eu digito um número do tipo 10:25, a planilha já entende como sendo data/hora e daí para a frente a coisa fica complicada na hora de fazer o split. Agradeço antecipadamente.
Olá, muito obrigado! Ah entendi, pode deixar ela como hora mesmo na sua planilha e no código muda a parte da formatação das datas assim: ... // Formata data início e fim var dataInicio = new Date(dia); var dataFim = new Date(dia); dataInicio.setHours(horaInicio.getHours(), horaInicio.getMinutes()); // [MUDOU] dataFim.setHours(horaFim.getHours(), horaFim.getMinutes()); // [MUDOU] ... Isso vai corrigir esse erro. Espero ter ajudado, qualquer coisa, só chamar. Valeu!
Se eu entendi sua dúvida, parece que a planilha está assumindo o formato de data e você quer só a hora, então pra resolver isso, precisa selecionar esta coluna inteira, no menu superior clicar em formatar, selecionar a opção "Número" e depois selecionar "Hora" desta forma seu split vai funcionar.
Vídeo muito bom, parabéns. Ganhou +2 inscritos (me inscrevi com a conta coorporativa e a pessoal kkkkk) Tenho duas dúvidas. Tentei fazer lendo o documento de funções e com ajuda do chat GPT. Ele indicou usar API, mas a empresa bloqueia o acesso para liberar isso. As dúvidas: - Tem como adicionar uma sala existente ao evento? Pela função setLocation('ID da SALA") não deu certo, ele adiciona o ID por extenso como local. - Tem como gerar um link de meet automaticamente? Não achei função que faz isso, e o chat gpt mandou usar API. Valeuuu!
Muito obrigado, Gabriel! haha valeu pela força dupla! Quanto às dúvidas: 1) Tem como adicionar uma sala existente ao evento? Pela função setLocation('ID da SALA") não deu certo, ele adiciona o ID por extenso como local. : O ideal seria pela API do Calendar, mas você pode tentar adicionar o na lista de participantes, ex.: ### let idSala = ""; // substituir pelo id da sala var options = { ... guests: idSala + "" sendInvites: true // pra enviar o email }; ### Checa tbm se a sala foi configurada pra aceitar convites automaticamente. 2) Tem como gerar um link de meet automaticamente? Não achei função que faz isso, e o chat gpt mandou usar API. : Eu também não sei fazer sem ser pela API (Apps Script -> Serviços -> Google Calendar API), infelizmente :( Qualquer coisa, só chamar Valeu!
Bom dia! Parabéns! Vocês poderia criar uma cópia dessa planilha para compartilhar. Achei um vídeo que o UA-camr fez isso, mas usa planilha eh bem melhor. Abc
Na verdade ele criou a planilha com a função de sincronizar (como o botão que vc fez) e a colocou no drive. Em seguida, ele compartilhou o link da planilha. Eh possível baixar a planilha, fazer uma cópia, renomear e usar. Acho que poderia fazer isso para nós. A sua achei mais legal. Parabéns!
@@thalesbatista2715 ótima dica Thales, obrigado! Acabei de criar. Esse é o link, espero que ajude: docs.google.com/spreadsheets/d/177-I5N7tQ1X6k2PPCU__NFVnmOnEQdoll3E8XjxrIBg Valeu demais!
Olá boa tarde. Se apagar alguma linha na planilha do sheets, ele vai sincronizar no calendário da google ? Ou seja apaga também ? E caso altere um nome de uma célula no sheets ele também faz essa alteração no calendário google ? Obrigado !
Olá. Não, se apagar uma linha na planilha o evento continuará na agenda, pra fazer a remoção dos eventos a partir da planilha, confere esse vídeo com o passo a passo: ua-cam.com/video/S9N_3_SheyA/v-deo.html O nome da coluna não é utilizada na integração, só a ordem delas que é importante. Agora se você quer ver como atualizar os dados dos eventos na agenda você pode conferir aqui: ua-cam.com/video/nMxGIWW4d6o/v-deo.html Espero que ajude, valeu!
Olá boa noite! Quando executei o seu código deu algum bug na agenda pois o dia por exemplo (2024-01-01) Não ia para a agenda mas quando eu copiei para dar a continuidade para o dia seguinte ai foi para a agenda mas por exemplo o dia (2024-01-02) ele na agenda deu no dia 01 mas a do dia dois não foi. Poderia me ajudar com essa questão? obrigado.
Olá, boa noite! é, tá estranho mesmo, a conta Google que está utilizando está configurada pra português Brasil (UTC -3) ou pra outra lingua e região? Você configurou a coluna pra ser do tipo Texto Simples, eu cheguei a mostrar essa parte no vídeo também? Poderia compartilhar parte do seu código aqui também? Valeu!
conteúdo excelente. Muito obrigada pelo tutorial!!! eu só nao estou conseguindo fazer a parte do duplicado. Aqui ele já está criando o evento duplicado :(
Olá, muito obrigado, valeu demais :)) Hmmm, a sua agenda já tinha os eventos antes de você executar o código? Se você quiser e puder compartilhar o cabeçalho da sua planilha e o seu código pra dar uma olhada, pode ajudar a entendermos melhor o problema.
Oi, você está executando o código como macro ao invés do Apps Script? Nessa integração usamos o Apps Script pra executar. Você pode acessar na própria Planilha Google, clicando em Extensões > Apps Script. Ou está usando acionador?
function cheguei() { var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var valores = planilha.getDataRange().getValues(); Logger.log(valores); var agenda = CalendarApp.getCalendarById('exemplo_id_agenda'); for (var i = 1; i < valores.length; i ++) { var linha = valores[i]; var sincronizado = linha[10]; if (sincronizado.toLowerCase() !== "sim") { var titulo = linha[0]; var turno = linha[1]; var evento = linha[2]; var local = linha[3]; var diaInicio = linha[4]; var horaInicio = linha[5]; var diaFim = linha[6]; var horaFim = linha[7]; var conv = linha[8]; var desc = linha[9]; var dataInicio = new Date(diaInicio); var dataFim = new Date(diaFim); dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]); dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]); var cor; switch (turno) { case "T1": cor = CalendarApp.EventColor.PALE_GREEN; break; case "T2": cor = CalendarApp.EventColor.PALE_BLUE; break; default: cor = CalendarApp.EventColor.ORANGE; } var evento = agenda.createEvent(titulo+' '+turno+' | '+evento, dataInicio, dataFim, {description: desc,location:local,guests:conv}); evento.setColor(cor).getId(); planilha.getRange(i + 1, 11).setValue("Sim"); } } }
Muito obrigado! Então, vendo seu código por cima e o erro, parece que ele não tá conseguindo ler essa agenda. A variável agenda está nula (agenda = null). Confere se o ID que está utilizando em exemplo_id_agenda realmente existe e se você tem permissão pra acessá-lo. Importante: Lembra que se a agenda for de uma conta diferente da que você está utilizando na planilha e Apps Script você precisa autorizar primeiro. Me fala se deu certo, por favor Valeu!
Excelente explicação! Muito obrigada. Quando eu copio o Script disponivel no GitHub, ao executar aparece "TypeError: horaInicio.split is not a function". Como eu resolvo isso? alguem poderia me ajudar? Agradeço demaisss!!! Nova inscritaaaaaaa 4ever
Olá! Muitíssimo obrigado pelo seu comentário! Esse erro geralmente acontece quando horaInicio não é um texto (string). Precisamos investigar o valor da sua variável horaInicio. Pra isso você pode chamar o Logger.log(`horaInicio: ${horaInicio}, tipo: ${typeof horaInicio}`); Copie e cole esse código ANTES da linha que está acontecendo o erro. Ah eu estou gravando um vídeo respondendo as principais dúvidas desse vídeo com várias dicas. Vai sair semana que vem, acho que pode gostar também. Espero que ajude, qualquer coisa só chamar aqui Valeu!!
@@carlosbaqueta Sou eu quem agradece. Deu super certo depois que inclui esse código. Já estou inscrita e tenho a intenção de acompanhar e aprender com o seu trabalho. Obrigada pela generosidade em nos ensinar. Eu procurei vários vídeos que ensinavam a combinar planilha com agenda, porém sem código de cores e sem botão de sincronização. Ficou super didático e com detalhes que fizeram toda diferença. Continue porque é sucesso!
Oi, muito obrigado! Provavelmente a sua variável horaInicio não é um texto simples. Pra dar certo, primeiro você precisa converter a coluna de data e hora na planilha pra Texto Simples, se deixar automático ele pode ler como Date e dar esse erro. pra conferir você pode adicionar as linhas a seguir antes dessa que deu erro: --- Logger.log(horaInicio); // Pra testar o valor Logger.log(typeof(horaInicio)); // Pra testar o tipo --- Confere se o valor está correto e se o tipo é string. Se o tipo for outro precisa fazer o que falei no início, só conferir o início do video que mostro como faz. Espero que ajude, qualquer coisa chama aqui. Valeu!
Boa tarde, amigo. Há a possibilidade de sempre que uma linha da planilha seja alterada, o valor da coluna de sincronização mude para que possa sincronizar automaticamente? Como essa mudança tem que ser feita de forma manual, acabo me esquecendo de alterar o valor e então o evento não sobe para a agenda Mas de qualquer forma seu conteúdo é da mais alta qualidade! Parabéns
Oi João, valeu demais! Tem como sim, você precisa fazer 3 coisas: 1) criar uma coluna depois da sincronizado, exemplo: "ID Evento" , pra salvar o identificador do evento lá na planilha. 2) criar uma função onEdit, pra ser executada toda vez que alguém editar a planilha. Exemplo: ### function onEdit(e) { const colunaSincronizado = 9; var pagina = e.source.getActiveSheet(); var colunaModificada = e.range.getColumn(); var linhaModificada = e.range.getRow(); if (colunaModificada != colunaSincronizado) { pagina.getRange(linhaModificada, colunaSincronizado).setValue("Não"); } } ### 2) Adaptar o código criarEventos inicial pra não duplicar eventos na agenda, exemplo: OBS.: o código novo tá marcado com [NOVO], só dar um CTRL + F :) ### function criarEventos () { var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var valores = planilha.getDataRange().getValues(); var agenda = CalendarApp.getDefaultCalendar(); for (var i = 1; i < valores.length; i++) { var linha = valores[i]; var sincronizado = linha[8]; if (sincronizado.toLowerCase() !== "sim") { var dia = linha[0]; var horaInicio = linha[1]; var horaFim = linha[2]; var titulo = linha[3]; var descricao = linha[4]; var prioridade = linha[6]; var idEvento = linha[9]; // [NOVO] LE A NOVA COLUNA IDEVENTO // Formata data início e fim var dataInicio = new Date(dia); var dataFim = new Date(dia); dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]); dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]); // Configura Cor do evento de acordo com prioridade var cor; switch (prioridade) { case "Alta": cor = CalendarApp.EventColor.RED; break; case "Média": cor = CalendarApp.EventColor.YELLOW; break; case "Baixa": cor = CalendarApp.EventColor.GREEN; break; default: cor = CalendarApp.EventColor.BLUE; } // [NOVO: 4 LINHAS A SEGUIR] // Se o evento já foi criado antes, remove antes de criar o novo if (idEvento !== "") { agenda.getEventById(idEvento).deleteEvent(); } // Cria evento na Google Agenda var evento = agenda.createEvent(titulo, dataInicio, dataFim, {description: descricao}); evento.setColor(cor); // Atualiza coluna ID Evento planilha.getRange(i + 1, 10).setValue(evento.getId()); // [NOVO] // Atualiza coluna sincronizado planilha.getRange(i + 1, 9).setValue("Sim"); } } } ### Espero que ajude, qq coisa me fala. Valeu!
@@carlosbaqueta boa noite Carlos, primeiramente muito obrigada, seu conteúdo realmente me ajudou muito, eu precisava exatamente disso e incluindo esta função de editar (apagar o evento anterior e incluir o atual) é o que estou testando porque eu precisaria da dinâmica de atualizar o calendário quando o evento fosse alterado, porem ao testar este script acima mostraram alguns códigos de erro e não funcionou, o erro esta aqui " if (sincronizado.toLowerCase() !== "sim") {"
Olá Marcela! espero que já tenha resolvido sua dúvida, mas caso ainda precise de ajuda, precisamos investigar melhor a mensagem de erro que aparece embaixo no log de execução. O que aparece?
Olá, sim, você pode adicionar nos parâmetros quando você cria o evento. Por exemplo, usar a coluna serviço como nome do evento e adicionar o valor na descrição. Dá uma olhadinha no código na parte que configuro esses valores que vai ficar mais claro, daí é só ajustar para os seus. Valeu!
Você consegue salvar na agenda de uma outra pessoa se ela compartilhou a agenda dela com você antes. Pra isso, basta seguir os passos nessa documentação: support.google.com/calendar/answer/37100 espero que ajude!
Consigo fazer essa sincronização se a planilha estiver em um email diferente da agenda? E para conseguir sincronizar pode ser qualquer formato de planilha ou tem que colocar como voce fez?
Oi Ana, ótima pergunta! Sim, você consegue. Esses são os passos: 1. A pessoa dona da conta da agenda precisa compartilhar a agenda dela com a conta que você está utilizando pra fazer a planilha e o código no Apps Script. Pra isso basta seguir os passos nessa documentação: support.google.com/calendar/answer/37100 2. Depois que tiver o acesso, a agenda aparecerá na sua lista de agendas e você conseguirá escrever na agenda utilizando o ID dela. Pra isso você precisa mudar uma linha no código (Apps Script), na hora de acessar a agenda, acesse assim: var agenda = CalendarApp.getCalendarById('ID_DA_AGENDA'); 3. Substitua o ID_DA_AGENDA pelo ID da agenda compartilhada. Pra pegar esse valor acesse: Agenda > Barra Lateral > Clica nos 3 pontinhos do lado do nome da agenda > Configurações e Compartilhamento > Desce até a sessão Integrar agenda > Copia o ID da agenda E o formato pode ser adaptado de acordo com a sua. Só precisa ajustar o código, incluindo as colunas ou mudando a ordem se necessário.
olá, claro, vamos lá: 1) qual o problema exatamente? Se você executa clicando no botão executar do Apps Script ele imprime algum erro na barra de mensagens de execução na parte de baixo? 2) Se não tiver mostrando nenhum erro precisamos imprimir o que ele está lendo da coluna da planilha que você está utilizando pra definir a cor. Imprima ela colocando essa linha no seu código: Logger.log(`Prioridade: ${prioridade}`); // Estou assumindo que a variável prioridade tem o valor dessa coluna, ajuste caso necessário 3) Se estiver aparecendo corretamente os valores, pode ser que tenha algum espaço extra no final, por exemplo. Pra corrigir na hora de ler a prioridade use esse código: var prioridade = linha[6].trim(); // Remove espaço extra no início e fim do texto. Teste esses passos, qualquer coisa me chama. Valeu!
bom dia Excelente conteúdo Direto ao ponto Por favor, gostaria que vc fizesse a implantação aqui Se faz isso, mande o teu contato Mandei no formulário, mas não tive resposta
Olá, bom dia! Então eu respondi pra você ontem, mandei pro e-mail que utilizou no formulário. Talvez o GMail marcou como Spam. Poderia checar a sua caixa Spam, por favor?
Irmão, queria puxar os dados da minha planilha so que de outra página, pq tem várias pags na minha planilha, e queria puxar so de uma especifica, poderia me dar um help?
Oi, claro! É só você usar esse método substituindo pelo nome da sua página: var pagina = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NOME_DA_SUA_PAGINA"); Qualquer coisa, me fala. Valeu!
esta dando erro de bloqueio e não aparece a opção avançada, na dúvida criei outra conta e testei funcionou a sequencia de clicar no botão avançado para liberar o acesso, e na minha conta principal não, o que pode ser?
acabei tendo mais uma dúvida. estou usando basicamente o mesmo script que você forneceu, porém com as minhas variaveis e afins. Mas gostaria que sempre que eu salvar com aquele esquema do botão, os eventos que eu excluí da planilha também excluissem da agenda, o que não está acontecendo Tem como resolver isso?
oi, deu certo essa parte? A parte de remoção é mais complicado, uma sugestão seria remover os eventos na agenda manualmente mesmo. Mas se isso for muito ruim no seu caso, uma outra solução, na mesma linha da outra que te sugeri no seu comentário anterior, seria criar uma coluna na tabela pra controlar quais eventos o script precisa remover na próxima execução. No código, precisaria checar essa coluna, remover o evento na agenda usando o ID Evento e atualizar a coluna pra marcar como removido (ou remover a linha de verdade da planilha). Se você for por esse caminho, eu criaria uma outra função no script pra fazer isso, pra ficar mais organizado, removerEventos(), por exemplo. Espero que ajude, qualquer coisa me fala mais sobre o problema que está tentando resolver, talvez tenha um jeito melhor. Valeu!
Oi, você pode adicionar emails de convidados, exemplo: var opcoes = { guests: ",,....,", // Lista de emails dos convidados separados com , sendInvites: true // Pra enviar email para os convidados }; CalendarApp.getDefaultCalendar().createEvent(titulo, dataInicio, dataFim, opcoes); Espero que ajude!
Excelente vídeo. Porém, comigo aconteceu o seguinte erro: Erro de sintaxe: SyntaxError: Unexpected identifier 'cor', linha: 27, arquivo: Código.gs pode me ajudar?
*carlos, enviei uma solicitação de orçamento faz uma semana, mas ainda nao recebi retorno. Tem algum email onde eu possa explicar melhor do q minha empresa precisa? Aguardo seu retorno. Obrigado!
Oi Leandro, chequei aqui, eu enviei um e-mail pra você no dia 02/10 com a resposta. Fiz um novo encaminhamento hoje, poderia checar seu e-mail e se ele foi pra Spam por algum motivo? Mandei pro e-mail que começa com adl
Olá boa noite primeiramente parabéns pelo vídeo, eu só estou com problema que preciso que o campo de descrição tivesse mais de uma informação sendo= orçamento Categoria Valor Material Sinal Dados Agendado por Se puder me ajudar eu agradeço e mais uma vez parabéns pelo vídeo
Olá @liliankarolyne9198, muito obrigado, fico feliz por ter te ajudado :). Tem sim, você pode colocar quantas colunas precisar, basta concatenar os valores num texto só. Exemplo: var orcamento = linha[7]; // Ajustar o número correto pra sua planilha var categoria = linha[8]; // Ajustar o número correto pra sua planilha // ... Faça o mesmo pra todas as colunas que quiser adicionar na descrição. // Agora vamos juntar todas elas num único texto, assim: var descricao = `Orçamento: ${orcamento} Categoria: ${categoria} ...`; // Adicione todas. O é pra pular linha. Espero que ajude, qualquer coisa posta novamente Valeu!
Oi, entendi. Você poderia checar na agenda se a sua agenda está selecionada na barra lateral esquerda. Se estiver, no código você pode checar imprimir o id do evento criado com o logger. Lá no código quando configuramos a cor, na linha de baixo você pode chamar um Logger.log(evento.getId()) e executar o código via apps script pra ver Espero que ajude, qualquer coisa posta aqui!
Oi Rebeca, entendi, confere aqui nesse vídeo: na descrição tem o link pra planilha com o código apps script. Nele você pode conferir o que você está diferente. Caso de algum erro na execução coloca aqui também. Como Criar Eventos Numa Agenda Específica ua-cam.com/video/jVwHelbCO5I/v-deo.html Espero que ajude!
Oi, Isabelle! Você está executando o código exatamente como mostro no vídeo ou precisou adaptar alguma parte pro seu contexto? se o seu código rodou sem dar nenhum erro, eu conferiria os valores das datas, dataInicio e dataFim que ele tá usando pra chamar o createEvent(). E só adicionar o comando Logger.log(dataInicio) e depois passando o dataFim pra conferir. Espero que funcione! Me avisa aqui qualquer coisa!
Boa tarde! Incrível o conteúdo! Estou testando, mas quando chego nessa parte " var evento = agenda.createEvent(titulo, dataInicio, dataFim, {description: descricao}); evento.setColor(cor)" aparece esse erro "Exception: Invalid argument: color criarEventos @ Código.gs:40" e nao me deixa continuar.. já procurei em tudo e não achei nada pra resolver. Podem me ajudar ? queria testar e eu to apaixonada por essa área.
Olá, muito obrigado! Como está o código que define a cor do evento? Esse número 40 que está após Código.gs é o número da linha que aconteceu o erro, ela pode te dar a pista de onde procurar, se for a linha do evento.setColor , pode ser um problema no código de atribuição da cor.
Vamos checar, consegue checar se ele tá registrando SIM na coluna sincronizado e depois se você está lendo dela antes do if? Você poderia adicionar uns logger.log pra imprimir esses valores por favor?
Olá ! Linha é um conjunto de colunas / vetor de colunas, ou seja, é uma linha mesmo da tabela. Precisamos de mais informações desse erro. Você tentou executar novamente via Apps Script? o que apareceu na parte de baixo, no registro de execução?
Olá, provavelmente o tipo da sua horaInicio está diferente de texto (string). Tenta colocar um Logger.log(`horaInicio: ${horaInicio}, tipo: ${typeof horaInicio}`); no seu código depois de ler ela para verificar. Se for o tipo, precisa ajustar, como mostro no início do video. espero que ajude!
@@carlosbaqueta deu certo! Obrigado. Uma outra dúvida, se eu quiser pegar essa lógica e colocar numa planilha já existente que tem várias abas, como peço para sempre o script pegar aquela aba específica? E outra, se caso essa planilha específica a range de dados não seja exatamente a selecionada, mas preciso pedir que o script olhe sempre, por exemplo a range B1:I50. Como pode ser feito?
Eu fiz e consegui atualizar os eventos na planilha, porém o botão "Gerar Agenda" não consegui configurar. Deu um erro que não consegue ler 'toLowerCase'. Fiquei feliz em pelo menos Gerar a agenda.😂
Esse erro geralmente acontece quando sincronizado não é um texto (string). Precisamos investigar o valor da sua variável sincronizado. Pra isso você pode chamar o Logger.log (`sincronizado: ${sincronizado}, tipo: ${typeof sincronizado}`); Copie e cole esse código ANTES da linha que está acontecendo o erro. Depois quando você clicar no botão novamente, acesse o Apps Script > Barra lateral: Execuções > procure a última execução, provavelmente vai estar marcada como falha > clique nela e confira os valores que você imprimiu no logger. To gravando um vídeo respondendo as principais dúvidas desse vídeo com várias dicas, sai semana que vem, pode te ajudar a entender melhor essa lógica de testes. Espero que ajude! Qualquer coisa chama aqui Valeu!
Muito obrigado! Na planilha é só você selecionar a coluna e clicar no botão N de negrito. Na agenda isso não é possível, até onde eu conheço, porque é padronizado pelo próprio Google Agenda. Pra destacar um título você pode adicionar emoji, por exemplo. Na descrição do evento você pode colocar negrito utilizando as tags seu texto aqui Espero que ajude!
Oi! Parece que ele não está lendo corretamente as colunas da sua tabela. Adicione um log pra checar os valores que está lendo, exemplo: Logger.log(`dataInicio: ${dataInicio}, dataFim: ${dataFim} ...`); como foi na hora de chamar o split, provavelmente o problema está na leitura das datas. Espero que ajude!
Olá, tudo bem?
▶ Playlist Completa: ua-cam.com/play/PLpA7pYbYtZSZFH9TqDRRAQaGWArzbXkjX.html
Informações Úteis:
- A documentação do Apps Script pra planilhas: developers.google.com/apps-script/reference/spreadsheet
- O código Apps Script que apresentei no vídeo está no repositório Git do canal: github.com/baquetachannel/google-planilha-agenda/blob/main/main.gs
- Planilha Compartilhada (Copie para o seu Drive): docs.google.com/spreadsheets/d/177-I5N7tQ1X6k2PPCU__NFVnmOnEQdoll3E8XjxrIBg
Abraço e valeu pela força!
Obrigado pela aula. Uma dúvida: caso eu mude a data de eventos já criados ou qualquer coisa neles (descrição, etc), ele vai duplicar ou atualizar os eventos?
@@gabrielg_fariapelo que eu entendi, não vai duplicar, porém só vai atualizar um evento na agenda se vc substituir o "sim" por "não"
@@gabrielg_faria olá Gabriel, desculpa a demora, o UA-cam não me notificou do seu comentário. Acredito que já tenha encontrado a resposta, mas, caso não: pro código que mostrei, se você mudar a data e alterar o valor da célula SINCRONIZADO correspondente pra algo diferente de "sim", ele vai criar o evento na nova data e manter o anterior, ou seja, duplica. Pra isso não acontecer é preciso implementar a lógica de edição, você pode registrar o id do evento numa nova coluna e utilizar ele pra editar/remover o evento criado previamente.
Exemplo:
1) criar uma coluna depois da sincronizado, exemplo: "ID Evento" , pra salvar o identificador do evento lá na planilha.
2) criar uma função onEdit, pra ser executada toda vez que alguém editar a planilha. Exemplo:
###
function onEdit(e) {
const colunaSincronizado = 9;
var pagina = e.source.getActiveSheet();
var colunaModificada = e.range.getColumn();
var linhaModificada = e.range.getRow();
if (colunaModificada != colunaSincronizado) {
pagina.getRange(linhaModificada, colunaSincronizado).setValue("Não");
}
}
###
2) Adaptar o código criarEventos inicial pra não duplicar eventos na agenda, exemplo:
OBS.: o código novo tá marcado com [NOVO], só dar um CTRL + F :)
###
function criarEventos () {
var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var valores = planilha.getDataRange().getValues();
var agenda = CalendarApp.getDefaultCalendar();
for (var i = 1; i < valores.length; i++) {
var linha = valores[i];
var sincronizado = linha[8];
if (sincronizado.toLowerCase() !== "sim") {
var dia = linha[0];
var horaInicio = linha[1];
var horaFim = linha[2];
var titulo = linha[3];
var descricao = linha[4];
var prioridade = linha[6];
var idEvento = linha[9]; // [NOVO] LE A NOVA COLUNA IDEVENTO
// Formata data início e fim
var dataInicio = new Date(dia);
var dataFim = new Date(dia);
dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]);
dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]);
// Configura Cor do evento de acordo com prioridade
var cor;
switch (prioridade) {
case "Alta":
cor = CalendarApp.EventColor.RED;
break;
case "Média":
cor = CalendarApp.EventColor.YELLOW;
break;
case "Baixa":
cor = CalendarApp.EventColor.GREEN;
break;
default:
cor = CalendarApp.EventColor.BLUE;
}
// [NOVO: 4 LINHAS A SEGUIR]
// Se o evento já foi criado antes, remove antes de criar o novo
if (idEvento !== "") {
agenda.getEventById(idEvento).deleteEvent();
}
// Cria evento na Google Agenda
var evento = agenda.createEvent(titulo, dataInicio, dataFim, {description: descricao});
evento.setColor(cor);
// Atualiza coluna ID Evento
planilha.getRange(i + 1, 10).setValue(evento.getId()); // [NOVO]
// Atualiza coluna sincronizado
planilha.getRange(i + 1, 9).setValue("Sim");
}
}
}
###
Espero que ajude,
Valeu!
Olá, @carlosbaqueta
Já me inscrevi no canal e estou me divertindo com as possibilidades incentivadas por você. Obrigada!
Ainda sobre a integração da planilha com a agenda, como faríamos para excluir eventos??🥰
Preciso saber uma coisa, posso usar este mesmo código para realizar este mesmo intuito em outra planilha (planilha de eventos) com a mesma intenção mas criada com caracteres e palavras diferentes
MANO VC É O CARA!!!! PLANILHA JÁ FUNCIONANDO A MIL. SERVICO COMPLETO, RAPIDO, COMPARTILHOU PLANILHA NA MORAL AINDA É BOA PINTA E SORRIDENTE. SÓ APLAUSOS PRA TI. ABS DO RIO GRANDE DO SUL
Valeu demais!
Até que em fim um vídeo sem enrolação, parabéns.
Valeu demais !
Parabéns, muito bom. Objetivo, direto ao ponto e sem enrolação.
Obrigado!
Excelente estrutura de aula! Parabéns!
Muito obrigado!
Obrigado pelo vídeo. Boa didática.
Tenho umas perguntas:
- Tem como atualizar um evento ja cadastrado?
- Tem como fazer a sincronização inversa, ou seja, editando no calendar, editar a planilha?
Valeu!
- Tem como atualizar um evento ja cadastrado?
Tem sim, você pode guardar o ID dele na planilha logo depois que criar e usar no código.
Exemplo:
1) criar uma coluna depois da sincronizado, exemplo: "ID Evento" , pra salvar o identificador do evento lá na planilha.
2) criar uma função onEdit, pra ser executada toda vez que alguém editar a planilha. Exemplo:
###
function onEdit(e) {
const colunaSincronizado = 9;
var pagina = e.source.getActiveSheet();
var colunaModificada = e.range.getColumn();
var linhaModificada = e.range.getRow();
if (colunaModificada != colunaSincronizado) {
pagina.getRange(linhaModificada, colunaSincronizado).setValue("Não");
}
}
###
2) Adaptar o código criarEventos inicial pra não duplicar eventos na agenda, exemplo:
OBS.: o código novo tá marcado com [NOVO], só dar um CTRL + F :)
###
function criarEventos () {
var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var valores = planilha.getDataRange().getValues();
var agenda = CalendarApp.getDefaultCalendar();
for (var i = 1; i < valores.length; i++) {
var linha = valores[i];
var sincronizado = linha[8];
if (sincronizado.toLowerCase() !== "sim") {
var dia = linha[0];
var horaInicio = linha[1];
var horaFim = linha[2];
var titulo = linha[3];
var descricao = linha[4];
var prioridade = linha[6];
var idEvento = linha[9]; // [NOVO] LE A NOVA COLUNA IDEVENTO
// Formata data início e fim
var dataInicio = new Date(dia);
var dataFim = new Date(dia);
dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]);
dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]);
// Configura Cor do evento de acordo com prioridade
var cor;
switch (prioridade) {
case "Alta":
cor = CalendarApp.EventColor.RED;
break;
case "Média":
cor = CalendarApp.EventColor.YELLOW;
break;
case "Baixa":
cor = CalendarApp.EventColor.GREEN;
break;
default:
cor = CalendarApp.EventColor.BLUE;
}
// [NOVO: 4 LINHAS A SEGUIR]
// Se o evento já foi criado antes, remove antes de criar o novo
if (idEvento !== "") {
agenda.getEventById(idEvento).deleteEvent();
}
// Cria evento na Google Agenda
var evento = agenda.createEvent(titulo, dataInicio, dataFim, {description: descricao});
evento.setColor(cor);
// Atualiza coluna ID Evento
planilha.getRange(i + 1, 10).setValue(evento.getId()); // [NOVO]
// Atualiza coluna sincronizado
planilha.getRange(i + 1, 9).setValue("Sim");
}
}
}
###
- Tem como fazer a sincronização inversa, ou seja, editando no calendar, editar a planilha?
Sim, é uma lógica parecida com esse vídeo aqui: ua-cam.com/video/Giec8XfGiaQ/v-deo.htmlsi=_8SHC0-eKJZRrIXp
Espero que ajude, qq coisa me fala.
Valeu!
Irmão, eu fico tão feliz em ver programação e gostaria muito de aprender, não faço ideia de como começar. Aguardo o seu vídeo de programação básica. Sucesso!
Que legal Helber, vou planejar algo nesse sentido. Tem várias formas de estudar esses assuntos hoje, até mesmo pelo próprio YT. Mas às vezes tem tanta informação que a gente não sabe por onde começar né. Pensando em utilidade, Eu acho que é legal quando você busca formas de resolver os problemas no seu trabalho, por exemplo, utilizando tecnologia e ir aprendendo no caminho.
Valeu !
Carlos, seu canal tem muito potencial. Excelente comteudo, ótima didática e edição perfeita. Obrigado e continue com a qualidade de conteúdo.
Muito obrigado! Vamos aprendendo cada vez mais a cada vídeo
Valeu pela força!
@@carlosbaqueta te mandei um pedido de orçamento via Forms. Depois dá uma olhada. Queria saber se é viável pra mim.
Parabéns pelo vídeo, me ajudou muito a resolver o meu problema no serviço
Que sucesso! Fico feliz, muito obrigado!
Adorei, já consegui aplicar no meu trabalho. Parabéns!!
Que bom, fico feliz em saber! Muito obrigado!
Cara, sensacional sua didática!
Valeu demais!
de um professor do Ensino Médio: você não faz tutorial, você faz aulas! Muito bom!
Você pretende vender cursos?
Muito obrigado! Então, está nos meus planos sim, não sei ainda o tema. Quero fazer algo que realmente ajude e seja útil. Vou continuar postando aqui e ouvindo vocês no que mais precisam e vamos construindo o projeto.
Obrigado e valeu pela força!
@@carlosbaqueta por favor, considere Scripts e web apps da google
Ótimo conteúdo! Esse canal vai longe!
Valeu demais, Henrique! tmj
Explicação maravilhosa, agradeço pelo conteúdo
Muitíssimo obrigado Denis, fico feliz demais :)
Carlos, que vídeo bom. Obrigado e Parabéns!
Muito obrigado, Dieggo, fico feliz!
Conteúdo muito bom obrigado ganhou mais um escrito parabéns
Valeu demais Roberto!
perfeito.
ótima explicação.
Me ajudou muito.
Que bom que ajudou! Muito obrigado!
Show de bola
Valeu!
Muito bom o conteúdo! Obrigada
Obrigado, valeu demais :)
parabéns!!! ótimo conteúdo
Muito obrigado!
Fala, Baqueta! Antes de tudo, grato pelo ótimo conteúdo! Daí, a questão é: tem como ter "dia início e dia fim"? Trabalho como coordenador de produção de eventos artísticos e pro cronograma da equipe seria fundamental ter essa duas informações. Desde já, agradeço. Abraço.
Muito obrigado, Jonathas! Tem sim, no seu caso o mais simples seria trocar as 3 primeiras colunas (data, hora inicial e hora final) por apenas 2 do tipo Data Hora:
Data Inicial: ex 2024-08-10 13:00
Data final: ex. 2024-08-11 16:00
Daí no código, seria até mais simples, só ler as colunas direto , sem formatar.
Espero que ajude, valeu!
Vídeo muito bom, parabéns!!
Muito obrigado!
Cara como voce faz estes videos NESTA QUALIDADE e tem só 500 inscritos????? Muito obrigado amigão!!!
Poxa, muito obrigado! Uma hora destravamos, haha. Valeu demais por apoiar o canal!
@carlosbaqueta Meus parabéns pelo conteúdo e principalmente pela didática, incrível a tranquilidade e a serenidade da sua fala, de longe uma das minhas melhores descobertas no YT em 2024.
Amigo tenho uma dúvida e para apagar eventos da agenda ao deletarmos uma linha da planilha, existe como?
Abraços e mais uma vez meus parabéns.
Muitíssimo obrigado pelo seu comentário, deu um empurrão positivo aqui!
Tem sim. Pra remover o evento da agenda precisamos primeiro gravar o ID (IDentificador) dele na planilha e utilizar esse ID pra apagar da agenda.
Ideia de implementação mais simples:
1) Crie uma coluna pra guardar o ID do evento, exemplo: "ID Evento"
2) Mude a lógica da coluna Sincronizado. Vamos renomear ela para "Status Sincronização". Ao invés de guardar somente se o evento foi sincronizado ou não, vamos expandir pra adicionar outras possibilidades. Os valores possíveis pra ela agora seriam: NAO_SINCRONIZADO, SINCRONIZADO e A_EXCLUIR. Dica: adicione uma regra de validação pra permitir só esses valores.
3) No script, precisamos implementar a lógica de remoção de eventos. Confira esse exemplo: developers.google.com/apps-script/reference/calendar/calendar-event?hl=pt-br#deleteevent
4) Pra acionar o código, temos 2 opções aqui: 1) podemos colocar junto no codigo de sincronização ou 2) criar um novo botão pra fazer isso na interface. Acho que a 2 fica melhor, pq separa as 2 operações e facilita pra quem está utilizando. Você pode conferir como criar um botão no menu nesse vídeo: ua-cam.com/video/nH0u4-QOKU8/v-deo.html
Espero que te ajude!
Vou gravar um video respondendo as dúvidas logo mais.
Valeu!
Aula sensacional!!!!! Pra mim tá funcionando perfeitamente. Eu só tenho uma variável que preciso. É que essa planilha é compartilhada com o time. Como eu faço para adicionar apenas as minhas tarefas? E que meu time consiga puxar apenas as tarefas deles?
Valeu demais! Nesse caso, o melhor é separar por agenda. Na Google agenda você pode criar as agendas dos times e a sua. No código você pode fazer uma checagem pra cada linha/tarefa pra selecionar a agenda correta e criar nela.
Na tabela também é importante ter alguma coluna pra dizer em qual agenda salvar. Daí no código é só utilizar ela na checagem.
Espero que ajude, valeu
@@carlosbaqueta Poderia dar mais detalhes também gostaria de compartilhar a agenda com outras pessoas
muito bom e funciona , sm complicação, eu precisaria de colocar o local do evento na planilha, tem como ?
Muito obrigado! Tem sim, eu mostro nesse vídeo da playlist: ua-cam.com/video/t-NNuEAqSA0/v-deo.html
Que conteúdo incrível, Carlos! Parabéns. Gostaria de saber se é possível a criação de eventos que sejam recorrentes, como por exemplo uma reunião que acontece toda semana no mesmo horário, ou todo dia no mesmo horário
Muito obrigado,Patrícia ! Sim é possível, você precisa criar os eventos de uma forma diferente, createEventSeries , passando a regra de recorrência, confere aqui: developers.google.com/apps-script/reference/calendar/calendar#createeventseriestitle,-starttime,-endtime,-recurrence
Espero que ajude!
Valeu
Excelente vídeo!!
tenho uma dúvida, como posso deixar o título do evento em negrito?
Excelente! Parabéns
Muito obrigado!
Antes de tudo gostaria de parabeniza-lo pelo ótimo vídeo, Carlos. No entanto, surgiu um questionamento: é possível adicionar convidados ao evento, dessa forma automatizada, se eu criar uma coluna adicional com o e-mail deles no google planilhas?
Muito obrigado pela força!
Sim, é possível. O parâmetro options aceita adicionar mais parâmetros, como convidados (guests) e localização. Vou passar um exemplo pra você, antes de chamar o createEvent() faça:
---------
// Ler os e-mails da planilha (Mude a linha a seguir pra ler os emails das colunas da sua planilha)
var convidados = "exemplo1@gmail.com, exemplo2@gmail.com";
// Cria o objeto options com os parâmetros.
var options = {
description: descricao,
guests: convidados,
sendInvites: true // Pra enviar os e-mails para os convidados
}
// Cria o evento no calendário
var evento = calendar.createEvent(titulo, dataInicio, dataFim, options);
-----------
Documentação: developers.google.com/apps-script/reference/calendar/calendar#createEvent(String,Date,Date,Object)
Espero que ajude, qualquer coisa chama aqui.
Valeu!
@@carlosbaqueta fala meu nobre, eu useia duvida do colega para fazer na minha e não rolou onde eu encaixo essas linhas de codigos? grato demais
@@carlosbaqueta cheguei na duvida do colega ai em cima e gostaria de saber onde eu colocar essas linhas, consegui fazer todo codigo do seu video funcionar mas queria de fato adicionar convidados e não to conseguindo, vocÊ pode me ajudar?? desde ja grato!
@@guilkungfu Olá, tranquilo, vamos lá: Primeiro você precisa ler o campo da sua tabela que tem os emails dos convidados, cheque se está conseguindo ler corretamente utilizando o comando Logger.log(convidados) ; Aqui é importante que os emails estejam separados por vírgula como eu coloquei aqui:
// Ler os e-mails da planilha (Mude a linha a seguir pra ler os emails das colunas da sua planilha)
var convidados = "exemplo1@gmail.com, exemplo2@gmail.com";
Depois que você leu os convidados corretamente:
- Adicione esse codigo na linha que chamamos o calendar.createEvent
1) Tira essa linha:
2) cola no lugar essas:
// Cria o objeto options com os parâmetros.
var options = {
description: descricao,
guests: convidados, //
@@carlosbaqueta@carlosbaqueta meu caro ta aparecendo alguns erros ja tentei refazer ela do zero 3 vezes mas ainda apresenta que o calendar is not defined, depois fala do metodo e.source não ser reconhecido eu não sei mais o que fazer rsrsrsrs se quiser eu te mando minha planilha e a lista de codigos confesso a tu que é desmotivante mas sigo na luta veja meu codigo embaixo esse dai ele ta funcionando tudo certo só preciso colocar os convidados, mas ta osso:
function onEdit(e) {
const colunaSincronizado = 7;
var pagina = e.source.getActiveSheet();
var colunaModificada = e.range.getColumn();
var linhaModificada = e.range.getRow();
if (colunaModificada != colunaSincronizado) {
pagina.getRange(linhaModificada, colunaSincronizado).setValue("Não");
}
}
function criarEventos () {
var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var valores = planilha.getDataRange().getValues();
// Acessa a agenda padrão da conta. Pra acessar outra, chame o método CalendarApp.getCalendarById('ID_DA_AGENDA')
var agenda = CalendarApp.getCalendarById('guilkungfu@gmail.com')
for (var i = 1; i < valores.length; i++) {
var linha = valores[i];
var sincronizado = linha[6];
if (sincronizado.toLowerCase() !== "sim") {
var dia = linha[1];
var titulo = linha[2];
var horaInicio = linha[3];
var horaFim = linha[4];
var prioridade = linha[5];
var idEvento = linha[7]
var options = linha[8];
// Formata data início e fim
var dataInicio = new Date(dia);
var dataFim = new Date(dia);
dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]);
dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]);
// Configura Cor do evento de acordo com prioridade
var cor;
switch (prioridade) {
case "Alta":
cor = CalendarApp.EventColor.RED;
break;
case "Média":
cor = CalendarApp.EventColor.YELLOW;
break;
case "Baixa":
cor = CalendarApp.EventColor.GREEN;
break;
default:
cor = CalendarApp.EventColor.BLUE;
}
// [NOVO: 4 LINHAS A SEGUIR]
// Se o evento já foi criado antes, remove antes de criar o novo
if (idEvento !== "") {
agenda.getEventById(idEvento).deleteEvent();
}
// Cria evento na Agenda
var evento = agenda.createEvent(titulo, dataInicio, dataFim, options);
evento.setColor(cor);
// Atualiza coluna ID Evento
planilha.getRange(i + 1, 8).setValue(evento.getId()); // [NOVO]
// Atualiza coluna sincronizado
planilha.getRange(i + 1, 7).setValue("Sim");
}
}
}
Vídeo objetivo e muito bom! Parabéns! Consigo incluir uma condição para dias da semana e horários disponíveis? Não sei se fui clara, mas gostaria de disponibilizar o preenchimento da planilha com base na minha disponibilidade.
Muito obrigado!
Pensando aqui, talvez você não precisa utilizar uma planilha, me corrija se estiver errado, por favor. Você já utilizou a função agendamento do próprio Google Agenda? Quando você vai na sua agenda e clica pra criar um evento vai aparecer um botão: Agendamento de horários. Você pode clicar nele e configurar seus horários disponíveis. Ele vai gerar uma página com esses horários que você pode compartilhar com quem precisa agendar horários com você.
Espero ter ajudado, qualquer coisa, só chamar aqui :)
Valeu!
@@carlosbaqueta é a solução que eu utilizo, mas preciso de um relatório com os campos do formulário que crio dentro do agendamento para apresentação do uso do laboratório que administro aos meus superiores.
Olá, tudo bem? Parabéns pelo ótimo conteúdo e qualidade do vídeo e instrução! Eu gostaria de saber como faço se eu quiser os eventos na opção de "dia inteiro", é possível? Abs
Olá, muito obrigado! Você pode utilizar o método createAllDayEvent ao invés do createEvent da agenda para esses casos. Se a sua planilha tiver os eventos de hora normais também você precisa fazer uma checagem (if) dentro do código pra saber se precisa criar o evento de dia inteiro ou normal.
Espero que ajude,
Valeu!
Olá @carlosbaqueta, obrigada pelo ensinamento. Pode me tirar uma dúvida se possível? Criei um código para minha agenda seguindo seu passo a passo, porém sem o campo "horário" de início e término. Porém, ao ativar o código, ele aparece na agenda como a data anterior que coloquei na planilha. O que poderia ser? E qual seria o modo de limpar a agenda para testar a questão da sincronização? Muito obrigada,
Muito obrigado! Essa parece ser um problema de fuso horário. Cheque qual fuso horário está configurado na agenda que você está tentando criar os eventos e veja se é o mesmo utilizado no Google Sheets/Apps Script que está executando a integração.
Valeu!
Conteudo maravilhoso! Como faz para trocar a agenda. Os eventos serem cadastrados numa agenda nova especifica?
Muito obrigado! É só seguir esse passo a passo aqui:
Como Criar Eventos Numa Agenda Específica
ua-cam.com/video/jVwHelbCO5I/v-deo.html
Espero que ajude
Valeu!
Olá, parabéns pelo conteúdo. Como faço um evento se repetir semanalmente, quinzenalmente etc?
Muito obrigado! Nesse caso, você precisa criar uma série de eventos. Aqui tem um exemplo de como fazer:
developers.google.com/apps-script/reference/calendar/calendar-app?hl=pt-br#createeventseriestitle,-starttime,-endtime,-recurrence
Como eu faço para adicionar o evento em uma agenda específica?
Muito bom o seu conteúdo compartilhei com geral, não desiste
Oi, muitíssimo obrigado, valeu demais pela força! :)
Pra adicionar numa agenda específica, você precisa fazer 1 modificação: ao invés de chamar o método getDefaultCalendar(), substitua a linha correspondente por essa:
var agenda = CalendarApp.getCalendarById('ID_DA_SUA_AGENDA');
O ID_DA_SUA_AGENDA você encontra acessando a página de configurações:
> Clica no ícone engrenagem no topo direito
> Clica em Configurações
> Na barra lateral esquerda, vai em Configurações das minhas agendas
> Clica na agenda que vc quer acessar
> Role até a seção Integrar agenda
> Encontre o ID da agenda
> Copie e substitua no código.
Pra ajudar, essa é a documentação oficial:
developers.google.com/apps-script/reference/calendar/calendar-app?hl=pt-br#getCalendarById(String)
Espero ter ajudado, abraço!
@@carlosbaqueta Como adiciono eventos em múltiplas agendas a partir da mesma planilha? Ou seja, como na mesma planilha eu tenho uma coluna que define a agenda onde será salvo o evento e como fica o script pra fazer isso?
Professor não faço ideia de programação e desses códigos.
Poderia incluir o nome da empresa, contato na empresa e telefone?
Poderia fazer essa planilha e configurar? Quanto cobraria ?
Olá! Sem problemas, posso ajudar sim. Basta me enviar os detalhes por aqui: forms.gle/6oFSHDYtMa8J6KeZ7
Top
Quero saber se tem como fazer isso direto do wpp numa conversa de um lead com um chatbot de atendimento com IA, onde o lead quisesse marcar uma reunião enfim algum tipo de agendamento e o chatbot verificasse os dias disponíveis na agenda e fornecesse essa informação p ele, e logo após o lead escolher o dia e falar pro chatbot, o chatbot com a IA vai lá no Google agenda e cria um evento
Obrigado! Dá pra fazer uma integração, porém é mais complexo se for fazer ponta a ponta. Uma forma mais simples seria utilizar uma ferramenta de automação, por exemplo, o Zapier (ou alguma outra similar).
Valeu!
Olá, professor! Vídeo maravilhoso, já ganhou mais um inscrito. Estou com uma dúvida, caso seja uma planilha do forms, o que deve mudar no código? Obrigada
Olá, muito obrigado! Não deve mudar nada a princípio, a parte do código no Apps Script continua igual. Qualquer coisa escreva um comentário aqui!
Valeu
@@carlosbaqueta Professor, fiz o script igual o seu, porém ao executar aparece essa mensagem: TypeError: horaInicio.split is not a function. Como devo proceder?
Olá! Consegui quase tudo que eu precisava. No atual estágio, está me faltando um comando para adicionar duas variáveis em cada um dos campos da agenda, no caso em "titulo" preciso colocar variavel 'nome' e 'numero_registro' juntos, separados por espaço - hifen - espaço. Já no campo "descricao" preciso inserir 'descricao' novo paragrafo 'contatos'. Poderia ajudar nesse ajuste do código. Desde já, grato! Abraço
Olá, valeu!
Pro título você pode fazer: var titulo = `${nome} - ${numero_registro}`;
Pros contatos, assumindo que estão em colunas na sua planilha, você pode concatenar eles numa string formatada, exemplo:
--
var contatos = `${contato1}, ${contato2}, ....`;
--
e depois formatar com:
--
var descFinal = `${descricao}
${contatos}`;
--
*
= nova linha
Me fala se deu certo depois
Valeu!
Carlos, fantástico o seu vídeo. Não estou conseguindo abrir a documentação com o código de programação que você utilizou. Como posso fazer?
Muito obrigado, Pedro!
Perfeito, vou passar aqui pra você:
- A documentação do Apps Script pra planilhas é essa daqui: developers.google.com/apps-script/reference/spreadsheet
- O código Apps Script que apresentei no vídeo está no repositório Git do canal: github.com/baquetachannel/google-planilha-agenda/blob/main/main.gs
Me conta depois se deu certo, por favor
Valeu!
seria bacana colocar uma coluna de convidados do evento, abraço otimo video
Valeu! ótima sugestão, abs!
Conteúdo muito bom, parabéns!!!
Essa semana surgiu uma necessidade no trabalho de integrar uma planilha de follow-up com o google agenda, acredito que o seu conteúdo irá me ajudar muito. No entanto, tenho uma dúvida, a minha planilha tem 3 colunas de datas (FUP 1, 2 e 3), é possível colocar essas 3 datas para o mesmo título (célula)? Se puder me ajudar eu agradeço.
Grato!
Muito obrigado, João!
Perfeito, nesse caso eu consigo ver duas possibilidades:
1) Solução mais complexa: você modifica o código dentro do for pra criar os 3 eventos na agenda, ou seja, fazer 3 chamadas para a agenda. Aqui você precisa criar uma data de início e fim pra cada um dos FUPs da sua linha, como são 3, você consegue fazer "triplicando" o código que está lá um pra cada FUP. Porém essa solução vai ser mais fácil de errar na hora de programar.
2) Solução mais simples: você pode modificar a sua planilha pra ter um FUP por linha, ou seja, uma linha sua viraria 3. Se isso for possível, essa solução seria mais simples.
Dica: Se não for possível fazer a 2 solução, você pode colar o código inicial no ChatGPT ou no Bard, por exemplo, e pedir pra ele ajustar o código para considerar as 3 colunas de FUP. Depois você pode checar e testar. Caso dê algum erro, você pode utilizar o ChatGPT para te ajudar a encontrar o problema junto com você até funcionar.
Espero ter ajudado, qualquer coisa me fala!
Valeu!
Excelente vídeo! Só uma dúvida, tem como colocar na descrição da agenda informações de dois ou três campos de uma planilha?
Muito obrigado! Tem sim, você pode utilizar quantas quiser, basta juntar os valores numa única string/texto.
Exemplo:
var desc = `${coluna1}
${coluna2}
….`;
Ou você pode usar o método .join() também, se preferir.
Espero que ajude!
Valeu
Parabens! Execelente.
Uma pergunta: É possivel um comando no script para desfazer o evento, tanto na planilha como na agenda?
Muito obrigado!
Sim, pra apagar ele você pode seguir uma lógica parecida a que utilizamos nesse vídeo sobre edição de eventos: ua-cam.com/video/nMxGIWW4d6o/v-deo.html
A lógica é: 1) guardar o ID do evento na planilha e 2) utilizar esse ID no código pra buscar o evento a ser apagado com getEventById e apagar ele com deleteEvent.
Espero que te ajude, qualquer coisa só chamar!
Valeu
@@carlosbaquetavc já considerou fazer vídeos sobre appsheet, flutterflow, etc? Essas ferramentas nocode estão bem em alta e vc explica muito bem.
Queria, se possível, ver essa integração em appsheet quando vc tiver tempo pra nos mostrar. Ficaria bem bacana, com sua didática.
Muito obrigado! agradeço sua sugestão, vou pesquisar mais a fundo sobre appsheet
Valeu!
Video excelente! tem como criar os eventos sendo como "o dia todo" ?
Muito obrigado! Pra isso você pode utilizar o método createAllDayEvent: developers.google.com/apps-script/reference/calendar/calendar?hl=pt-br#createalldayeventtitle,-startdate,-enddate,-options
Espero que ajude, valeu!
Bom dia. Parabéns pela didática. Estou com uma dúvida: de saída, a tua planilha mostra as colunas de hora alinhadas a esquerda, indicando que o conteúdo é entendido como texto. No meu caso, sempre que eu digito um número do tipo 10:25, a planilha já entende como sendo data/hora e daí para a frente a coisa fica complicada na hora de fazer o split. Agradeço antecipadamente.
Olá, muito obrigado! Ah entendi, pode deixar ela como hora mesmo na sua planilha e no código muda a parte da formatação das datas assim:
...
// Formata data início e fim
var dataInicio = new Date(dia);
var dataFim = new Date(dia);
dataInicio.setHours(horaInicio.getHours(), horaInicio.getMinutes()); // [MUDOU]
dataFim.setHours(horaFim.getHours(), horaFim.getMinutes()); // [MUDOU]
...
Isso vai corrigir esse erro.
Espero ter ajudado, qualquer coisa, só chamar.
Valeu!
Se eu entendi sua dúvida, parece que a planilha está assumindo o formato de data e você quer só a hora, então pra resolver isso, precisa selecionar esta coluna inteira, no menu superior clicar em formatar, selecionar a opção "Número" e depois selecionar "Hora" desta forma seu split vai funcionar.
Vídeo muito bom, parabéns. Ganhou +2 inscritos (me inscrevi com a conta coorporativa e a pessoal kkkkk)
Tenho duas dúvidas. Tentei fazer lendo o documento de funções e com ajuda do chat GPT. Ele indicou usar API, mas a empresa bloqueia o acesso para liberar isso.
As dúvidas:
- Tem como adicionar uma sala existente ao evento? Pela função setLocation('ID da SALA") não deu certo, ele adiciona o ID por extenso como local.
- Tem como gerar um link de meet automaticamente? Não achei função que faz isso, e o chat gpt mandou usar API.
Valeuuu!
Muito obrigado, Gabriel! haha valeu pela força dupla! Quanto às dúvidas:
1) Tem como adicionar uma sala existente ao evento? Pela função setLocation('ID da SALA") não deu certo, ele adiciona o ID por extenso como local.
: O ideal seria pela API do Calendar, mas você pode tentar adicionar o na lista de participantes, ex.:
###
let idSala = ""; // substituir pelo id da sala
var options = {
...
guests: idSala + ""
sendInvites: true // pra enviar o email
};
###
Checa tbm se a sala foi configurada pra aceitar convites automaticamente.
2) Tem como gerar um link de meet automaticamente? Não achei função que faz isso, e o chat gpt mandou usar API.
: Eu também não sei fazer sem ser pela API (Apps Script -> Serviços -> Google Calendar API), infelizmente :(
Qualquer coisa, só chamar
Valeu!
Bom dia! Parabéns! Vocês poderia criar uma cópia dessa planilha para compartilhar. Achei um vídeo que o UA-camr fez isso, mas usa planilha eh bem melhor. Abc
Olá, muito obrigado! Você diz salvar o código do Apps Script numa planilha?
Obrigado pela sugestão!
Abraço
Na verdade ele criou a planilha com a função de sincronizar (como o botão que vc fez) e a colocou no drive. Em seguida, ele compartilhou o link da planilha. Eh possível baixar a planilha, fazer uma cópia, renomear e usar. Acho que poderia fazer isso para nós. A sua achei mais legal. Parabéns!
@@thalesbatista2715 ótima dica Thales, obrigado! Acabei de criar.
Esse é o link, espero que ajude: docs.google.com/spreadsheets/d/177-I5N7tQ1X6k2PPCU__NFVnmOnEQdoll3E8XjxrIBg
Valeu demais!
Boa! Já vou experimentar!! Obg pelo retorno
Parabéns pelo vídeo! É possível eu criar um evento diretamente na agenda do meu colaborador?
Muito obrigado! Sim, se você (a conta que tiver executando o Apps Script) tiver permissão e adicionado a agenda dele na sua Google Agenda, sim.
Valeu!
Show! Obrigada.
Olá boa tarde. Se apagar alguma linha na planilha do sheets, ele vai sincronizar no calendário da google ? Ou seja apaga também ? E caso altere um nome de uma célula no sheets ele também faz essa alteração no calendário google ? Obrigado !
Olá. Não, se apagar uma linha na planilha o evento continuará na agenda, pra fazer a remoção dos eventos a partir da planilha, confere esse vídeo com o passo a passo: ua-cam.com/video/S9N_3_SheyA/v-deo.html
O nome da coluna não é utilizada na integração, só a ordem delas que é importante. Agora se você quer ver como atualizar os dados dos eventos na agenda você pode conferir aqui: ua-cam.com/video/nMxGIWW4d6o/v-deo.html
Espero que ajude, valeu!
Olá boa noite! Quando executei o seu código deu algum bug na agenda pois o dia por exemplo (2024-01-01) Não ia para a agenda mas quando eu copiei para dar a continuidade para o dia seguinte ai foi para a agenda mas por exemplo o dia (2024-01-02) ele na agenda deu no dia 01 mas a do dia dois não foi. Poderia me ajudar com essa questão? obrigado.
Olá, boa noite!
é, tá estranho mesmo, a conta Google que está utilizando está configurada pra português Brasil (UTC -3) ou pra outra lingua e região?
Você configurou a coluna pra ser do tipo Texto Simples, eu cheguei a mostrar essa parte no vídeo também?
Poderia compartilhar parte do seu código aqui também?
Valeu!
conteúdo excelente. Muito obrigada pelo tutorial!!! eu só nao estou conseguindo fazer a parte do duplicado. Aqui ele já está criando o evento duplicado :(
Olá, muito obrigado, valeu demais :))
Hmmm, a sua agenda já tinha os eventos antes de você executar o código?
Se você quiser e puder compartilhar o cabeçalho da sua planilha e o seu código pra dar uma olhada, pode ajudar a entendermos melhor o problema.
Fala, amigo! Não sei por qual motivo minha agenda não está recebendo o agendamento executado na planilha com o macro, consegue me ajudar?
Oi, você está executando o código como macro ao invés do Apps Script? Nessa integração usamos o Apps Script pra executar. Você pode acessar na própria Planilha Google, clicando em Extensões > Apps Script.
Ou está usando acionador?
Muito bom o seu conteúdo +1 inscrito
Quando eu executo o meu script aparece "TypeError: Cannot Read Properties of Null (Reading ‘createEvent’)"
function cheguei() {
var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var valores = planilha.getDataRange().getValues();
Logger.log(valores);
var agenda = CalendarApp.getCalendarById('exemplo_id_agenda');
for (var i = 1; i < valores.length; i ++) {
var linha = valores[i];
var sincronizado = linha[10];
if (sincronizado.toLowerCase() !== "sim") {
var titulo = linha[0];
var turno = linha[1];
var evento = linha[2];
var local = linha[3];
var diaInicio = linha[4];
var horaInicio = linha[5];
var diaFim = linha[6];
var horaFim = linha[7];
var conv = linha[8];
var desc = linha[9];
var dataInicio = new Date(diaInicio);
var dataFim = new Date(diaFim);
dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]);
dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]);
var cor;
switch (turno) {
case "T1":
cor = CalendarApp.EventColor.PALE_GREEN;
break;
case "T2":
cor = CalendarApp.EventColor.PALE_BLUE;
break;
default:
cor = CalendarApp.EventColor.ORANGE;
}
var evento = agenda.createEvent(titulo+' '+turno+' | '+evento, dataInicio, dataFim, {description: desc,location:local,guests:conv});
evento.setColor(cor).getId();
planilha.getRange(i + 1, 11).setValue("Sim");
}
}
}
Muito obrigado!
Então, vendo seu código por cima e o erro, parece que ele não tá conseguindo ler essa agenda. A variável agenda está nula (agenda = null).
Confere se o ID que está utilizando em exemplo_id_agenda realmente existe e se você tem permissão pra acessá-lo.
Importante: Lembra que se a agenda for de uma conta diferente da que você está utilizando na planilha e Apps Script você precisa autorizar primeiro.
Me fala se deu certo, por favor
Valeu!
Excelente explicação! Muito obrigada. Quando eu copio o Script disponivel no GitHub, ao executar aparece "TypeError: horaInicio.split is not a function". Como eu resolvo isso? alguem poderia me ajudar? Agradeço demaisss!!! Nova inscritaaaaaaa 4ever
Olá! Muitíssimo obrigado pelo seu comentário!
Esse erro geralmente acontece quando horaInicio não é um texto (string). Precisamos investigar o valor da sua variável horaInicio. Pra isso você pode chamar o
Logger.log(`horaInicio: ${horaInicio}, tipo: ${typeof horaInicio}`);
Copie e cole esse código ANTES da linha que está acontecendo o erro.
Ah eu estou gravando um vídeo respondendo as principais dúvidas desse vídeo com várias dicas. Vai sair semana que vem, acho que pode gostar também.
Espero que ajude, qualquer coisa só chamar aqui
Valeu!!
@@carlosbaqueta Sou eu quem agradece. Deu super certo depois que inclui esse código. Já estou inscrita e tenho a intenção de acompanhar e aprender com o seu trabalho. Obrigada pela generosidade em nos ensinar. Eu procurei vários vídeos que ensinavam a combinar planilha com agenda, porém sem código de cores e sem botão de sincronização. Ficou super didático e com detalhes que fizeram toda diferença. Continue porque é sucesso!
+1 inscrito
Olá, excelente conteúdo. Ao fazer o meu, apareceu o seguinte erro: TypeError: horaInicio.split is not a function
Oi, muito obrigado! Provavelmente a sua variável horaInicio não é um texto simples. Pra dar certo, primeiro você precisa converter a coluna de data e hora na planilha pra Texto Simples, se deixar automático ele pode ler como Date e dar esse erro.
pra conferir você pode adicionar as linhas a seguir antes dessa que deu erro:
---
Logger.log(horaInicio); // Pra testar o valor
Logger.log(typeof(horaInicio)); // Pra testar o tipo
---
Confere se o valor está correto e se o tipo é string. Se o tipo for outro precisa fazer o que falei no início, só conferir o início do video que mostro como faz.
Espero que ajude, qualquer coisa chama aqui.
Valeu!
@@carlosbaqueta Deu certinho, obrigada. Gostei muito do conteudo
Boa tarde, amigo. Há a possibilidade de sempre que uma linha da planilha seja alterada, o valor da coluna de sincronização mude para que possa sincronizar automaticamente?
Como essa mudança tem que ser feita de forma manual, acabo me esquecendo de alterar o valor e então o evento não sobe para a agenda
Mas de qualquer forma seu conteúdo é da mais alta qualidade! Parabéns
Oi João, valeu demais! Tem como sim, você precisa fazer 3 coisas:
1) criar uma coluna depois da sincronizado, exemplo: "ID Evento" , pra salvar o identificador do evento lá na planilha.
2) criar uma função onEdit, pra ser executada toda vez que alguém editar a planilha. Exemplo:
###
function onEdit(e) {
const colunaSincronizado = 9;
var pagina = e.source.getActiveSheet();
var colunaModificada = e.range.getColumn();
var linhaModificada = e.range.getRow();
if (colunaModificada != colunaSincronizado) {
pagina.getRange(linhaModificada, colunaSincronizado).setValue("Não");
}
}
###
2) Adaptar o código criarEventos inicial pra não duplicar eventos na agenda, exemplo:
OBS.: o código novo tá marcado com [NOVO], só dar um CTRL + F :)
###
function criarEventos () {
var planilha = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var valores = planilha.getDataRange().getValues();
var agenda = CalendarApp.getDefaultCalendar();
for (var i = 1; i < valores.length; i++) {
var linha = valores[i];
var sincronizado = linha[8];
if (sincronizado.toLowerCase() !== "sim") {
var dia = linha[0];
var horaInicio = linha[1];
var horaFim = linha[2];
var titulo = linha[3];
var descricao = linha[4];
var prioridade = linha[6];
var idEvento = linha[9]; // [NOVO] LE A NOVA COLUNA IDEVENTO
// Formata data início e fim
var dataInicio = new Date(dia);
var dataFim = new Date(dia);
dataInicio.setHours(horaInicio.split(":")[0], horaInicio.split(":")[1]);
dataFim.setHours(horaFim.split(":")[0], horaFim.split(":")[1]);
// Configura Cor do evento de acordo com prioridade
var cor;
switch (prioridade) {
case "Alta":
cor = CalendarApp.EventColor.RED;
break;
case "Média":
cor = CalendarApp.EventColor.YELLOW;
break;
case "Baixa":
cor = CalendarApp.EventColor.GREEN;
break;
default:
cor = CalendarApp.EventColor.BLUE;
}
// [NOVO: 4 LINHAS A SEGUIR]
// Se o evento já foi criado antes, remove antes de criar o novo
if (idEvento !== "") {
agenda.getEventById(idEvento).deleteEvent();
}
// Cria evento na Google Agenda
var evento = agenda.createEvent(titulo, dataInicio, dataFim, {description: descricao});
evento.setColor(cor);
// Atualiza coluna ID Evento
planilha.getRange(i + 1, 10).setValue(evento.getId()); // [NOVO]
// Atualiza coluna sincronizado
planilha.getRange(i + 1, 9).setValue("Sim");
}
}
}
###
Espero que ajude, qq coisa me fala.
Valeu!
@@carlosbaqueta caraca! Valeu pelo suporte! Vou testar o quanto antes e te dou o feedback de como foi. Muito obrigado :)
@@carlosbaqueta boa noite Carlos, primeiramente muito obrigada, seu conteúdo realmente me ajudou muito, eu precisava exatamente disso e incluindo esta função de editar (apagar o evento anterior e incluir o atual) é o que estou testando porque eu precisaria da dinâmica de atualizar o calendário quando o evento fosse alterado, porem ao testar este script acima mostraram alguns códigos de erro e não funcionou, o erro esta aqui " if (sincronizado.toLowerCase() !== "sim") {"
Olá Marcela! espero que já tenha resolvido sua dúvida, mas caso ainda precise de ajuda, precisamos investigar melhor a mensagem de erro que aparece embaixo no log de execução. O que aparece?
E possivel criar eventos(servicos) e tambem adicionar o custo desse servico?
Olá, sim, você pode adicionar nos parâmetros quando você cria o evento. Por exemplo, usar a coluna serviço como nome do evento e adicionar o valor na descrição. Dá uma olhadinha no código na parte que configuro esses valores que vai ficar mais claro, daí é só ajustar para os seus.
Valeu!
@@carlosbaqueta como posso entrar em contato com voce?
Olá, desculpa a demora. Você pode entrar em contato por aqui: forms.gle/6oFSHDYtMa8J6KeZ7
valeu!
Eu consigo fazer isso para compartilhar com outras pessoa e já salvar na agenda de terceiro?
Você consegue salvar na agenda de uma outra pessoa se ela compartilhou a agenda dela com você antes.
Pra isso, basta seguir os passos nessa documentação: support.google.com/calendar/answer/37100
espero que ajude!
Consigo fazer essa sincronização se a planilha estiver em um email diferente da agenda? E para conseguir sincronizar pode ser qualquer formato de planilha ou tem que colocar como voce fez?
Oi Ana, ótima pergunta! Sim, você consegue.
Esses são os passos:
1. A pessoa dona da conta da agenda precisa compartilhar a agenda dela com a conta que você está utilizando pra fazer a planilha e o código no Apps Script. Pra isso basta seguir os passos nessa documentação: support.google.com/calendar/answer/37100
2. Depois que tiver o acesso, a agenda aparecerá na sua lista de agendas e você conseguirá escrever na agenda utilizando o ID dela. Pra isso você precisa mudar uma linha no código (Apps Script), na hora de acessar a agenda, acesse assim:
var agenda = CalendarApp.getCalendarById('ID_DA_AGENDA');
3. Substitua o ID_DA_AGENDA pelo ID da agenda compartilhada. Pra pegar esse valor acesse:
Agenda > Barra Lateral > Clica nos 3 pontinhos do lado do nome da agenda > Configurações e Compartilhamento > Desce até a sessão Integrar agenda > Copia o ID da agenda
E o formato pode ser adaptado de acordo com a sua. Só precisa ajustar o código, incluindo as colunas ou mudando a ordem se necessário.
Outra questão: coloco, por exemplo 13:00 no início e ele coloca na Agenda o evento a ser feito 3 horas depois. Porque acontece isto?
Provavelmente é configuração de fuso horário. Precisa checar a configuração do fuso se está configurado como Brasília UTC-3 nas configurações
professor boa tarde, fiz o teste aqui e também não está dando certo a parte das cores, consegue dar um help?
olá, claro, vamos lá:
1) qual o problema exatamente? Se você executa clicando no botão executar do Apps Script ele imprime algum erro na barra de mensagens de execução na parte de baixo?
2) Se não tiver mostrando nenhum erro precisamos imprimir o que ele está lendo da coluna da planilha que você está utilizando pra definir a cor. Imprima ela colocando essa linha no seu código:
Logger.log(`Prioridade: ${prioridade}`); // Estou assumindo que a variável prioridade tem o valor dessa coluna, ajuste caso necessário
3) Se estiver aparecendo corretamente os valores, pode ser que tenha algum espaço extra no final, por exemplo. Pra corrigir na hora de ler a prioridade use esse código:
var prioridade = linha[6].trim(); // Remove espaço extra no início e fim do texto.
Teste esses passos, qualquer coisa me chama.
Valeu!
bom dia
Excelente conteúdo
Direto ao ponto
Por favor, gostaria que vc fizesse a implantação aqui
Se faz isso, mande o teu contato
Mandei no formulário, mas não tive resposta
Olá, bom dia! Então eu respondi pra você ontem, mandei pro e-mail que utilizou no formulário. Talvez o GMail marcou como Spam. Poderia checar a sua caixa Spam, por favor?
da para fazer o contrário? colocar os dados de uma agenda em uma planilha?[
oi, dá sim, o próximo vídeo será sobre isso inclusive, sairá nos próximos dias! A lógica é muito parecida, usando o Apps Script.
@@carlosbaqueta no aguardo
@@FranciBahamult esse é o vídeo: ua-cam.com/video/Giec8XfGiaQ/v-deo.html
Espero que ajude, valeu!
No google planilhas é possível criar uma macro que dê o comando para imprimir ?
Você diz imprimir numa impressora? Se sim, não conheço uma forma de fazer por esse caminho.
Irmão, queria puxar os dados da minha planilha so que de outra página, pq tem várias pags na minha planilha, e queria puxar so de uma especifica, poderia me dar um help?
Oi, claro! É só você usar esse método substituindo pelo nome da sua página:
var pagina = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NOME_DA_SUA_PAGINA");
Qualquer coisa, me fala.
Valeu!
@@carlosbaqueta vlw irmao, deu certo aqui, tudo de bom p vc fera tmjj
@@gransysdesenvolvimento2682 aeee sucesso!
esta dando erro de bloqueio e não aparece a opção avançada, na dúvida criei outra conta e testei funcionou a sequencia de clicar no botão avançado para liberar o acesso, e na minha conta principal não, o que pode ser?
olá, pode ser problema de permissão da primeira conta. Teria que ver mais a fundo.
acabei tendo mais uma dúvida. estou usando basicamente o mesmo script que você forneceu, porém com as minhas variaveis e afins. Mas gostaria que sempre que eu salvar com aquele esquema do botão, os eventos que eu excluí da planilha também excluissem da agenda, o que não está acontecendo
Tem como resolver isso?
oi, deu certo essa parte?
A parte de remoção é mais complicado, uma sugestão seria remover os eventos na agenda manualmente mesmo.
Mas se isso for muito ruim no seu caso, uma outra solução, na mesma linha da outra que te sugeri no seu comentário anterior, seria criar uma coluna na tabela pra controlar quais eventos o script precisa remover na próxima execução. No código, precisaria checar essa coluna, remover o evento na agenda usando o ID Evento e atualizar a coluna pra marcar como removido (ou remover a linha de verdade da planilha). Se você for por esse caminho, eu criaria uma outra função no script pra fazer isso, pra ficar mais organizado, removerEventos(), por exemplo.
Espero que ajude, qualquer coisa me fala mais sobre o problema que está tentando resolver, talvez tenha um jeito melhor.
Valeu!
Ola no meu código deu um erro assim
TypError: cannot read properties of null ( reading ' getactivesheet')
Poderia ne ajudar
Oi, preciso ver as primeiras linhas do seu código, consegue mandar aqui?
Seria possível adicionar mais de 1 e-mail para refletir em mais agendas?
Oi, você pode adicionar emails de convidados, exemplo:
var opcoes = {
guests: ",,....,", // Lista de emails dos convidados separados com ,
sendInvites: true // Pra enviar email para os convidados
};
CalendarApp.getDefaultCalendar().createEvent(titulo, dataInicio, dataFim, opcoes);
Espero que ajude!
Excelente vídeo. Porém, comigo aconteceu o seguinte erro:
Erro de sintaxe: SyntaxError: Unexpected identifier 'cor', linha: 27, arquivo: Código.gs
pode me ajudar?
Muito obrigado! Ah esse tipo de erro pode ser várias coisas, como está essa linha e a anterior?
*carlos, enviei uma solicitação de orçamento faz uma semana, mas ainda nao recebi retorno. Tem algum email onde eu possa explicar melhor do q minha empresa precisa? Aguardo seu retorno. Obrigado!
Oi Leandro, chequei aqui, eu enviei um e-mail pra você no dia 02/10 com a resposta. Fiz um novo encaminhamento hoje, poderia checar seu e-mail e se ele foi pra Spam por algum motivo?
Mandei pro e-mail que começa com adl
@@carlosbaqueta pode ser...vou averiguar. Muito obrigado, Carlos!!!
@@carlosbaqueta recebi sim carlos...desculpe, nao havia checado a caixa de spam. E-mail respondido e aguardando seu contato. Muito obrigado!!!
Olá boa noite primeiramente parabéns pelo vídeo, eu só estou com problema que preciso que o campo de descrição tivesse mais de uma informação sendo= orçamento
Categoria
Valor
Material
Sinal
Dados
Agendado por
Se puder me ajudar eu agradeço e mais uma vez parabéns pelo vídeo
Olá @liliankarolyne9198, muito obrigado, fico feliz por ter te ajudado :). Tem sim, você pode colocar quantas colunas precisar, basta concatenar os valores num texto só. Exemplo:
var orcamento = linha[7]; // Ajustar o número correto pra sua planilha
var categoria = linha[8]; // Ajustar o número correto pra sua planilha
// ... Faça o mesmo pra todas as colunas que quiser adicionar na descrição.
// Agora vamos juntar todas elas num único texto, assim:
var descricao = `Orçamento: ${orcamento}
Categoria: ${categoria}
...`; // Adicione todas. O
é pra pular linha.
Espero que ajude, qualquer coisa posta novamente
Valeu!
O código é executado sem problemas, mas não cria os eventos na minha planilha. Dá uma dica?
Oi, entendi. Você poderia checar na agenda se a sua agenda está selecionada na barra lateral esquerda. Se estiver, no código você pode checar imprimir o id do evento criado com o logger. Lá no código quando configuramos a cor, na linha de baixo você pode chamar um Logger.log(evento.getId()) e executar o código via apps script pra ver
Espero que ajude, qualquer coisa posta aqui!
na parte não duplicar os eventos, vc tirou o logger e não mostrou, poderia mostrar? Conseguir gerar a agenda, mas o sim automatizado não.
Oi Rebeca, entendi, confere aqui nesse vídeo: na descrição tem o link pra planilha com o código apps script. Nele você pode conferir o que você está diferente.
Caso de algum erro na execução coloca aqui também.
Como Criar Eventos Numa Agenda Específica
ua-cam.com/video/jVwHelbCO5I/v-deo.html
Espero que ajude!
Olá, boa tarde ! Meu código rodou porém não apareceu nada na minha agenda, consegue me ajudar ?
Oi, Isabelle!
Você está executando o código exatamente como mostro no vídeo ou precisou adaptar alguma parte pro seu contexto?
se o seu código rodou sem dar nenhum erro, eu conferiria os valores das datas, dataInicio e dataFim que ele tá usando pra chamar o createEvent(). E só adicionar o comando Logger.log(dataInicio) e depois passando o dataFim pra conferir.
Espero que funcione! Me avisa aqui qualquer coisa!
Boa tarde! Incrível o conteúdo!
Estou testando, mas quando chego nessa parte " var evento = agenda.createEvent(titulo, dataInicio, dataFim, {description: descricao});
evento.setColor(cor)"
aparece esse erro
"Exception: Invalid argument: color
criarEventos @ Código.gs:40"
e nao me deixa continuar.. já procurei em tudo e não achei nada pra resolver.
Podem me ajudar ? queria testar e eu to apaixonada por essa área.
Olá, muito obrigado! Como está o código que define a cor do evento?
Esse número 40 que está após Código.gs é o número da linha que aconteceu o erro, ela pode te dar a pista de onde procurar, se for a linha do evento.setColor , pode ser um problema no código de atribuição da cor.
Olá, cada vez que executo o código dá erro; ReferenceError: Calendar is not defined. Como resolvo este problema? Tenho vários calendários.
Oi, se for na hora de acessar sua agenda você precisa utilizar CalendarApp.
é possivel pagar para alguem fazer isso pra minha empresa?
Oi, sim. Você pode solicitar orçamento aqui: forms.gle/1d9tWt5xkCZYBdnU6
Obrigado
FIz igual você postou e continua duplicando o evento. O que pode ser?
Vamos checar, consegue checar se ele tá registrando SIM na coluna sincronizado e depois se você está lendo dela antes do if?
Você poderia adicionar uns logger.log pra imprimir esses valores por favor?
Linha significa a coluna onde esta a informação correto?
Apareceu esta mensagem
Erro Ocorreu um erro desconhecido. Tente novamente mais tarde.
Olá ! Linha é um conjunto de colunas / vetor de colunas, ou seja, é uma linha mesmo da tabela. Precisamos de mais informações desse erro. Você tentou executar novamente via Apps Script? o que apareceu na parte de baixo, no registro de execução?
No meu não aparece as extensões, pode me ajudar?
Olá! Você está abrindo o Google Sheets pelo navegador? Está utilizando uma conta pessoal, sua?
Estou tendo o seguinte erro no script:
TypeError: horaInicio.split is not a function
Alguém pode me ajudar?
Olá, provavelmente o tipo da sua horaInicio está diferente de texto (string). Tenta colocar um
Logger.log(`horaInicio: ${horaInicio}, tipo: ${typeof horaInicio}`);
no seu código depois de ler ela para verificar.
Se for o tipo, precisa ajustar, como mostro no início do video.
espero que ajude!
@@carlosbaqueta deu certo! Obrigado.
Uma outra dúvida, se eu quiser pegar essa lógica e colocar numa planilha já existente que tem várias abas, como peço para sempre o script pegar aquela aba específica?
E outra, se caso essa planilha específica a range de dados não seja exatamente a selecionada, mas preciso pedir que o script olhe sempre, por exemplo a range B1:I50. Como pode ser feito?
Eu fiz e consegui atualizar os eventos na planilha, porém o botão "Gerar Agenda" não consegui configurar. Deu um erro que não consegue ler 'toLowerCase'. Fiquei feliz em pelo menos Gerar a agenda.😂
Esse erro geralmente acontece quando sincronizado não é um texto (string). Precisamos investigar o valor da sua variável sincronizado. Pra isso você pode chamar o
Logger.log (`sincronizado: ${sincronizado}, tipo: ${typeof sincronizado}`);
Copie e cole esse código ANTES da linha que está acontecendo o erro.
Depois quando você clicar no botão novamente, acesse o Apps Script > Barra lateral: Execuções > procure a última execução, provavelmente vai estar marcada como falha > clique nela e confira os valores que você imprimiu no logger.
To gravando um vídeo respondendo as principais dúvidas desse vídeo com várias dicas, sai semana que vem, pode te ajudar a entender melhor essa lógica de testes.
Espero que ajude! Qualquer coisa chama aqui
Valeu!
excelente vídeo!!
uma dúvida... como posso deixar o título do evento em negrito?
Muito obrigado! Na planilha é só você selecionar a coluna e clicar no botão N de negrito. Na agenda isso não é possível, até onde eu conheço, porque é padronizado pelo próprio Google Agenda. Pra destacar um título você pode adicionar emoji, por exemplo.
Na descrição do evento você pode colocar negrito utilizando as tags seu texto aqui
Espero que ajude!
Eu fiz e não consegui eu rodo e não vai
Poxa, mas qual erro ele mostra durante a execução?
Não deu certo pra mim :(
Oi, qual o erro?
Desisto!!!!!Eu só queria linkar uma data da planilha para virar evento...rs
Haha seria ótimo realmente
O meu esta aparecendo erro TypeError: annot readproperties of undefiened (reading 'split' criar evento @Código gs20
Por favor me ajude
Oi! Parece que ele não está lendo corretamente as colunas da sua tabela. Adicione um log pra checar os valores que está lendo, exemplo:
Logger.log(`dataInicio: ${dataInicio}, dataFim: ${dataFim} ...`);
como foi na hora de chamar o split, provavelmente o problema está na leitura das datas.
Espero que ajude!