Workflow n8n

Automatisation Google Sheets avec n8n : gestion des résultats

  • Ce workflow n8n a pour objectif d'automatiser la gestion des résultats dans Google Sheets, facilitant ainsi le traitement et l'analyse des données. Il est particulièrement utile pour les équipes marketing et les analystes de données qui souhaitent optimiser leur flux de travail en réduisant le temps consacré aux tâches manuelles. Grâce à cette automatisation n8n, les utilisateurs peuvent facilement télécharger des résultats, générer des textes alternatifs pour des images et mettre à jour leurs feuilles de calcul sans intervention manuelle.
  • Le workflow commence par un déclencheur manuel, permettant à l'utilisateur de lancer le processus à tout moment. Ensuite, il utilise des nœuds pour télécharger des résultats depuis Google Sheets, traiter ces données en les divisant en lots, et générer des textes alternatifs via l'API OpenAI. Une condition vérifie si la longueur du texte alternatif est inférieure à 50 caractères, ce qui permet de filtrer les résultats. Les données sont ensuite mises à jour dans Google Sheets, assurant ainsi que les informations restent à jour et pertinentes.
  • En intégrant ce workflow dans votre processus, vous pouvez réduire les erreurs humaines, gagner du temps et améliorer la précision des données. L'agence automatisation Uclic vous aide à tirer parti de ces outils pour maximiser votre efficacité opérationnelle.
Tags clés :automatisationGoogle Sheetsn8nworkflowagence automatisation
Catégorie: Manual · Tags: automatisation, Google Sheets, n8n, workflow, agence automatisation0

Workflow n8n Google Sheets, agence automatisation : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n Google Sheets, agence automatisation : détail des nœuds

  • Sticky Note4

    Ce noeud crée une note autocollante avec des dimensions et un contenu spécifiés.

  • When clicking ‘Test workflow’

    Ce noeud déclenche manuellement l'exécution du workflow lorsque l'utilisateur clique sur 'Test workflow'.

  • Loop Over Items

    Ce noeud permet de traiter les éléments en les divisant en plusieurs lots.

  • Sticky Note1

    Ce noeud crée une note autocollante avec une couleur, des dimensions et un contenu spécifiés.

  • Page Link

    Ce noeud définit des options et des affectations pour une page de lien.

  • Download Results

    Ce noeud télécharge les résultats d'une feuille Google spécifiée.

  • altLength < 50

    Ce noeud évalue une condition pour vérifier si la longueur d'un texte alternatif est inférieure à 50.

  • Limit records

    Ce noeud limite le nombre d'enregistrements traités à un maximum spécifié.

  • Generate altText

    Ce noeud génère un texte alternatif à l'aide d'OpenAI en fonction des paramètres fournis.

  • Update Results

    Ce noeud met à jour les résultats dans une feuille Google en fonction des colonnes et de l'opération spécifiées.

  • Sticky Note

    Ce noeud crée une note autocollante avec une couleur, des dimensions et un contenu spécifiés.

  • Store Results

    Ce noeud stocke les résultats dans une feuille Google selon les colonnes et l'opération définies.

  • Download HTML

    Ce noeud effectue une requête HTTP pour télécharger un fichier HTML à partir d'une URL spécifiée.

  • Get Images urls with altText

    Ce noeud exécute un code JavaScript pour obtenir des URLs d'images avec un texte alternatif.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "meta": {
    "instanceId": "=",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "bdc398f0-a882-4fbe-ac37-7ca7e15a1081",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        -200
      ],
      "parameters": {
        "width": 460,
        "height": 340,
        "content": "![Tutorial](https://www.samirsaci.com/content/images/2025/04/temp-8.png)\n[🎥 Check My Tutorial](https://www.youtube.com/watch?v=LwTIro6Rapk)"
      },
      "typeVersion": 1
    },
    {
      "id": "d132a584-770e-438c-bd98-28a9c1afa780",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        1000,
        120
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d51eec9d-a177-4f5e-89e5-c73b6109f5ce",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2100,
        640
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "41da741b-1c1d-4d41-9a96-85cadacd1c8e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1000,
        -200
      ],
      "parameters": {
        "color": 7,
        "width": 1040,
        "height": 460,
        "content": "### 1. First Block: audit the page to extract all the images with their respective alternative text\nThis workflow sends an HTTP request to collect the HTML processed by the Javascript node to list all the images in the page with their alternative texts. The results are saved in a Google Sheet.\n\n#### How to setup?\n- **Set your page link** in the first node\n- **Record the results in a Google Sheet Node**:\n   1. Add your Google Sheet API credentials to access the Google Sheet file\n   2. Select the file using the list, an URL or an ID\n   3. Select the sheet in which you want to record your working sessions\n   4. Map the fields\n  [Learn more about the Google Sheet Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e7a269cd-a2da-4ea9-9ec8-c023c45b9e96",
      "name": "Page Link",
      "type": "n8n-nodes-base.set",
      "position": [
        1200,
        120
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e69e5e68-5cd1-4f81-a940-2e5202d5589b",
              "name": "url",
              "type": "string",
              "value": "https://www.samirsaci.com/sustainable-business-strategy-with-data-analytics/"
            },
            {
              "id": "8839ac43-5d6a-4656-b555-714f836fc687",
              "name": "baseUrl",
              "type": "string",
              "value": "https://www.samirsaci.com"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "6e6b7801-1f4c-4d00-826d-184dff58cee1",
      "name": "Download Results",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1440,
        640
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "=",
          "value": "gid=0",
          "cachedResultUrl": "=",
          "cachedResultName": "="
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "=",
          "cachedResultUrl": "=",
          "cachedResultName": "="
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "1a137755-3f14-4881-93a5-db7f8678fa0d",
      "name": "altLength < 50",
      "type": "n8n-nodes-base.if",
      "position": [
        1660,
        640
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a3b0ca70-0496-4966-94fd-f2927ce02ba9",
              "operator": {
                "type": "number",
                "operation": "lt"
              },
              "leftValue": "={{ $json.altLength }}",
              "rightValue": 100
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "60ea3935-313e-4d16-a8b8-a2fe7da8df82",
      "name": "Limit records",
      "type": "n8n-nodes-base.limit",
      "position": [
        1880,
        560
      ],
      "parameters": {
        "maxItems": 5
      },
      "typeVersion": 1
    },
    {
      "id": "5785deb6-1bf4-40a6-b556-42aad4c01c83",
      "name": "Generate altText",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2320,
        560
      ],
      "parameters": {
        "text": "Please generate the alternative text (alt text) for this image under 150 characters.\t",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-2024-05-13",
          "cachedResultName": "GPT-4O-2024-05-13"
        },
        "options": {
          "maxTokens": 150
        },
        "resource": "image",
        "imageUrls": "={{ $('altLength < 50').item.json.src }}",
        "operation": "analyze"
      },
      "notesInFlow": true,
      "typeVersion": 1.8
    },
    {
      "id": "86051a7f-e91a-4913-9c19-772673ff6306",
      "name": "Update Results",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2540,
        640
      ],
      "parameters": {
        "columns": {
          "value": {
            "page": "=",
            "index": "={{ $('Loop Over Items').item.json.index }}",
            "newAlt": "={{ $json.content }}"
          },
          "schema": [
            {
              "id": "index",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "index",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "page",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "page",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "src",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "src",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "alt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "alt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "altLength",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "altLength",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "newAlt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "newAlt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "index"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "=",
          "cachedResultName": "="
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "=",
          "cachedResultUrl": "=",
          "cachedResultName": "="
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "b1ab97f7-a89e-40c8-ada3-22fcc6da2dcd",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1000,
        320
      ],
      "parameters": {
        "color": 7,
        "width": 1920,
        "height": 520,
        "content": "### 2. SecondBlock: generate alternative text for the image with altLength < 50\nThis workflow sends an HTTP request to collect the HTML processed by the Javascript node to list all the images in the page with their alternative texts. The results are saved in a Google Sheet.\n\n#### How to setup?\n- **Set your page link** in the first node\n- **Record the results in a Google Sheet Node**:\n   1. Add your Google Sheet API credentials to access the Google Sheet file\n   2. Select the file using the list, an URL or an ID\n   3. Select the sheet in which you want to record your working sessions\n   4. Map the fields\n  [Learn more about the Google Sheet Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c1bf1dcf-6789-43dd-9f15-29895c30fd23",
      "name": "Store Results",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1860,
        120
      ],
      "parameters": {
        "columns": {
          "value": {
            "alt": "={{ $json.alt }}",
            "src": "={{ $json.src }}",
            "page": "={{ $('Page Link').item.json.url }}",
            "index": "={{ $json.index }}",
            "altLength": "={{ $json.altLength }}"
          },
          "schema": [
            {
              "id": "index",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "index",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "page",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "page",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "src",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "src",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "alt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "alt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "altLength",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "altLength",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "newAlt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "newAlt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "=",
          "cachedResultName": "="
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "=",
          "cachedResultUrl": "=",
          "cachedResultName": "="
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.5
    },
    {
      "id": "fe71094e-3a22-4cda-90ad-4174258a9086",
      "name": "Download HTML",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1420,
        120
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "405fe4cf-5271-465c-8e2a-1f5d024228b6",
      "name": "Get Images urls with altText",
      "type": "n8n-nodes-base.code",
      "position": [
        1640,
        120
      ],
      "parameters": {
        "jsCode": "const html = $input.first().json.data;\nconst baseUrl = $('Page Link').first().json.baseUrl;\n\nconst imgTagRegex = /<img\\b[^>]*>/gi;\nconst altAttrRegex = /alt\\s*=\\s*[\"']([^\"']*)[\"']/i;\nconst srcAttrRegex = /src\\s*=\\s*[\"']([^\"']*)[\"']/i;\n\nconst imageTags = html.match(imgTagRegex) || [];\n\nconst results = imageTags.map((tag, index) => {\n  const altMatch = tag.match(altAttrRegex);\n  const srcMatch = tag.match(srcAttrRegex);\n\n  let alt = altMatch ? altMatch[1] : '[No alt text]';\n  let src = srcMatch ? srcMatch[1] : '[No src]';\n\n  // If src is relative, manually join with baseUrl\n  if (src !== '[No src]' && !src.startsWith('http')) {\n    if (baseUrl.endsWith('/') && src.startsWith('/')) {\n      src = baseUrl + src.slice(1);\n    } else if (!baseUrl.endsWith('/') && !src.startsWith('/')) {\n      src = baseUrl + '/' + src;\n    } else {\n      src = baseUrl + src;\n    }\n  }\n\n  return {\n    index: index + 1,\n    src,\n    alt,\n    altLength: alt.length,\n  };\n});\n\nreturn results.map(item => ({ json: item }));"
      },
      "typeVersion": 2
    }
  ],
  "pinData": {},
  "connections": {
    "Page Link": {
      "main": [
        [
          {
            "node": "Download HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download HTML": {
      "main": [
        [
          {
            "node": "Get Images urls with altText",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit records": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Results": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "altLength < 50": {
      "main": [
        [
          {
            "node": "Limit records",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Generate altText",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Results": {
      "main": [
        [
          {
            "node": "altLength < 50",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate altText": {
      "main": [
        [
          {
            "node": "Update Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Images urls with altText": {
      "main": [
        [
          {
            "node": "Store Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "Page Link",
            "type": "main",
            "index": 0
          },
          {
            "node": "Download Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Google Sheets, agence automatisation : pour qui est ce workflow ?

Ce workflow s'adresse aux équipes marketing, aux analystes de données et aux PME qui cherchent à automatiser la gestion de leurs résultats dans Google Sheets. Un niveau technique intermédiaire est recommandé pour une personnalisation optimale.

Workflow n8n Google Sheets, agence automatisation : problème résolu

Ce workflow résout le problème de la gestion manuelle des résultats dans Google Sheets, ce qui peut être fastidieux et sujet à des erreurs. En automatisant ce processus, les utilisateurs peuvent économiser du temps et réduire les risques d'erreurs, tout en assurant une mise à jour rapide et efficace des données. Les résultats concrets incluent une meilleure organisation des informations et une réactivité accrue dans l'analyse des données.

Workflow n8n Google Sheets, agence automatisation : étapes du workflow

Étape 1 : Le workflow est déclenché manuellement par l'utilisateur.

  • Étape 1 : Les résultats sont téléchargés depuis Google Sheets.
  • Étape 2 : Les données sont divisées en lots pour un traitement plus efficace.
  • Étape 3 : Un texte alternatif est généré pour chaque image à l'aide de l'API OpenAI.
  • Étape 4 : Une condition vérifie la longueur du texte alternatif pour s'assurer qu'il respecte les critères définis.
  • Étape 5 : Les résultats sont mis à jour dans Google Sheets, garantissant que les données sont toujours à jour.

Workflow n8n Google Sheets, agence automatisation : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier l'URL de l'API pour le téléchargement des résultats et ajuster les paramètres de la feuille de calcul Google, tels que le nom de la feuille et l'identifiant du document. Vous pouvez également adapter le code JavaScript utilisé pour générer les textes alternatifs selon vos besoins spécifiques. Enfin, assurez-vous de sécuriser le flux en intégrant des vérifications supplémentaires pour les données sensibles.