No mundo digital, a visibilidade online é essencial para o sucesso de qualquer empreendimento. Uma parte fundamental dessa visibilidade é a otimização para mecanismos de busca, ou SEO. E uma prática comum para melhorar o SEO é a renomeação de imagens de forma significativa e descritiva, permitindo que os motores de busca compreendam melhor o conteúdo visual de uma página.
No entanto, apesar da importância, a tarefa de renomear manualmente um grande volume de imagens pode ser tediosa e consumir muito tempo. Para muitas pequenas empresas ou equipes operacionais, encontrar uma solução eficiente e acessível para essa tarefa pode ser um verdadeiro desafio. Embora existam ferramentas especializadas disponíveis, muitas vezes elas vêm com custos significativos, o que pode ser proibitivo para operações com recursos limitados.
É aqui que entra a beleza da automação inteligente. Com as ferramentas certas e um pouco de criatividade, é possível simplificar processos operacionais complexos sem a necessidade de investimentos caros. Uma solução particularmente eficaz é o uso do Google Sheets em conjunto com o Google Apps Script.
Neste artigo, vou compartilhar como desenvolvemos um fluxo simples e eficiente para renomear e organizar imagens usando o Google Sheets e o Google Apps Script. Essa solução não apenas simplificou o processo, economizando horas de trabalho manual, mas também demonstra o poder da automação para otimizar as operações do dia a dia, mesmo para pequenas equipes com recursos limitados.
Vamos explorar como essa solução pode revolucionar sua abordagem para gerenciamento de imagens e operações online.
É importante ressaltar que essa aplicação é resultado de um estudo e de uma demonstração da facilidade de automatização de processos utilizando Google Sheets e Google Apps Script. Embora tenha sido desenvolvida como um projeto inicial, essa solução simples pode servir como base para aplicações muito mais complexas. Essa abordagem exemplifica como a automação inteligente pode ser implementada de forma acessível e eficiente, proporcionando oportunidades para otimizar uma variedade de operações empresariais.
Esse exemplo básico visa ilustrar o potencial das ferramentas que todos nós temos à disposição, muitas vezes sem perceber o quão poderosas elas podem ser quando utilizadas de maneira criativa. A flexibilidade do Google Apps Script permite que as empresas adaptem os scripts às suas necessidades específicas, independentemente do setor ou do tamanho da operação. Isso significa que, com o conhecimento e a aplicação corretos, pequenas empresas podem competir com operações maiores e mais estabelecidas ao automatizar tarefas tediosas e repetitivas, liberando tempo e recursos para focar em atividades estratégicas e de maior valor agregado.
Por isso, estou compartilhando o modelo de Sheets e os scripts criados, para que outros também possam explorar e expandir essa ideia. É meu desejo que essa iniciativa sirva como uma fonte de inspiração, motivando profissionais e empresas a experimentarem e desenvolverem suas próprias soluções automatizadas. O futuro da produtividade empresarial está na capacidade de inovar e integrar tecnologias de forma eficiente, e essa solução inicial é apenas o começo de um caminho promissor rumo à automação completa e otimização contínua.
Sheets – Modelo do arquivo
Script – Criar Pastas
function createFolders() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var startRow = 4; // Começa a verificar a partir da linha 4
var lastRow = sheet.getLastRow();
for (var rowIndex = startRow; rowIndex <= lastRow; rowIndex++) {
var sku = sheet.getRange(rowIndex, 1).getValue(); // Obtém o SKU da mesma linha
// Verifica se a célula da coluna A não está vazia
if (sku) {
// Verifica se a pasta já existe em alguma das pastas “IN” ou “OUT”
var existsInIN = folderExists(sku, ‘IN’);
var existsInOut = folderExists(sku, ‘OUT’);
if (!existsInIN && !existsInOut) {
createFolder(sku);
} else {
var errorMessage = “Erro: Pasta já existente na pasta “;
if (existsInIN && existsInOut) {
errorMessage += “‘IN’ e ‘OUT'”;
} else if (existsInIN) {
errorMessage += “‘IN'”;
} else {
errorMessage += “‘OUT'”;
}
sheet.getRange(rowIndex, 4).setValue(errorMessage);
}
}
}
}
function folderExists(folderName, folderType) {
var folderId = folderType === ‘IN’ ? ‘ID_PASTA_IN’ : ‘ID_PASTA_OUT’;
var folder = DriveApp.getFolderById(folderId);
var existingFolders = folder.getFoldersByName(folderName);
return existingFolders.hasNext();
}
function createFolder(folderName) {
var inFolder = DriveApp.getFolderById(‘ID_PASTA_IN’); // Pasta “IN”
try {
inFolder.createFolder(folderName); // Cria a pasta com o nome do SKU na pasta “IN”
} catch (error) {
Logger.log(“Erro ao criar a pasta: ” + error.message);
}
}
Script – Renomear Imagens
function renameAndMoveFolders() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
for (var rowIndex = 2; rowIndex <= lastRow; rowIndex++) {
var sku = sheet.getRange(rowIndex, 1).getValue(); // Obtém o SKU da mesma linha
var nome = sheet.getRange(rowIndex, 2).getValue(); // Obtém o nome da mesma linha
var shouldExecute = sheet.getRange(rowIndex, 3).getValue(); // Verifica se deve executar o script
var statusCell = sheet.getRange(rowIndex, 4); // Célula para atualizar o status
if (shouldExecute === true) { // Verifica se deve executar o script
executeScript(sheet, rowIndex, sku, nome, statusCell);
}
}
}
function executeScript(sheet, rowIndex, sku, nome, statusCell) {
var inFolder = DriveApp.getFolderById(‘ID_PASTA_IN’); // Pasta “IN”
var outFolder = DriveApp.getFolderById(‘ID_PASTA_OUT’); // Pasta “OUT”
try {
// Verifica se a pasta do SKU existe na pasta “IN”
var skuFolders = inFolder.getFoldersByName(sku);
if (skuFolders.hasNext()) {
var skuFolder = skuFolders.next(); // Obtém a pasta do SKU
// Verifica se a pasta do SKU está vazia (sem arquivos)
if (!skuFolder.getFiles().hasNext()) {
statusCell.setValue(“Erro: Pasta do SKU está vazia”);
return; // Retorna sem prosseguir com o processo
}
// Renomear imagens na pasta do SKU
var images = skuFolder.getFiles();
var count = 1;
while (images.hasNext()) {
var image = images.next();
var newName = nome + “_” + (“0” + count).slice(-2); // Nome do arquivo com sequência numérica
image.setName(newName);
count++;
}
// Mover a pasta do SKU da pasta “IN” para a pasta “OUT”
skuFolder.moveTo(outFolder);
// Define o status como “Concluído” na coluna D
statusCell.setValue(“Concluído”);
} else {
statusCell.setValue(“Erro: Pasta do SKU não encontrada na pasta ‘IN'”);
}
} catch (error) {
// Se houver algum erro, define o status como “Erro” na coluna D
statusCell.setValue(“Erro: ” + error.message);
}
}
Script – Apagar Concluídos
function clearCompletedRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
var startRow = 4; // Começa a verificar a partir da linha 4
var statusColumn = 4; // Coluna D
// Percorre as linhas da planilha
for (var rowIndex = startRow; rowIndex <= lastRow; rowIndex++) {
var sku = sheet.getRange(rowIndex, 1).getValue(); // Obtém o valor da célula na coluna A
// Verifica se a célula na coluna A não está vazia
if (sku !== “”) {
var status = sheet.getRange(rowIndex, statusColumn).getValue();
// Se o status for “Concluído”, exclui a linha
if (status === “Concluído”) {
sheet.deleteRow(rowIndex);
}
}
}
}