npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-nextcloud-ext

v1.0.43

Published

n8n community nodes for Nextcloud — file management (list, upload, download, share), spreadsheet operations equivalent to Microsoft 365 Excel (including named table support), DOCX/ODT template rendering, and PDF form field read/write (AcroForm)

Downloads

5,577

Readme

n8n-nodes-nextcloud-ext

npm version License: MIT n8n community node

Nodes n8n communautaires pour Nextcloud — l'équivalent self-hosted des nodes Microsoft 365.

Gérez vos fichiers, manipulez vos tableurs, générez des documents Word/ODT depuis des templates, et lisez/remplissez des formulaires PDF — directement depuis vos workflows n8n, sans aucune dépendance au cloud Microsoft ou Google.


Nodes inclus

| Node | Équivalent MS 365 | Description | |---|---|---| | NextCloud Folder | OneDrive | Gestion de fichiers et dossiers via WebDAV | | NextCloud Spreadsheet | Excel | Lecture/écriture de fichiers tableur + tables Excel nommées | | NextCloud Search | Excel VLOOKUP | Recherche une valeur dans une colonne et retourne une valeur correspondante (RECHERCHEV) | | NextCloud Doc Template | Word (Mail Merge) | Remplissage de templates DOCX/ODT (syntaxe Carbone) + fusion d'annexes conditionnelles | | NextCloud PDF | — | Lecture, extraction de texte et remplissage de formulaires PDF AcroForm | | NextCloud OCR | — | Extraction de texte par OCR (Docling local, Mistral OCR) pour PDFs scannés ou aplatis |


Prérequis

  • n8n ≥ 1.0.0
  • Instance Nextcloud ≥ 20 accessible en HTTPS
  • Node.js ≥ 18.10

Installation

Via l'interface n8n (recommandé)

  1. Ouvrez n8n → SettingsCommunity Nodes
  2. Cliquez Install a community node
  3. Entrez n8n-nodes-nextcloud-ext
  4. Cliquez Install puis redémarrez n8n

Installation manuelle

npm install n8n-nodes-nextcloud-ext

Configuration des credentials

  1. Dans n8n → CredentialsNew → cherchez Nextcloud API
  2. Renseignez :

| Champ | Description | Exemple | |---|---|---| | Server URL | URL de base de votre Nextcloud (sans slash final) | https://cloud.mondomaine.fr | | Username | Votre identifiant Nextcloud | admin | | Password / App Password | Mot de passe ou mot de passe d'application | xxxx-xxxx-xxxx-xxxx |

Recommandé : créez un mot de passe d'application dans Nextcloud → Paramètres → Sécurité → Mots de passe d'application.


Node — NextCloud Folder

Gestion de fichiers, dossiers et partages via l'API WebDAV de Nextcloud.

Resource : File

| Opération | Description | |---|---| | List | Liste les fichiers d'un dossier | | Download | Télécharge un fichier (sortie binaire) | | Upload | Envoie un fichier binaire vers Nextcloud | | Delete | Supprime un fichier | | Move | Déplace ou renomme un fichier | | Copy | Copie un fichier vers un autre chemin |

Resource : Folder

| Opération | Description | |---|---| | List | Liste le contenu d'un dossier | | Create | Crée un nouveau dossier | | Delete | Supprime un dossier et tout son contenu |

Resource : Share

| Opération | Description | |---|---| | Create | Crée un lien de partage public ou vers un utilisateur/groupe | | Delete | Supprime un partage par son ID | | Get All | Liste tous vos partages actifs |


Node — NextCloud Spreadsheet

Lit et écrit dans des fichiers tableur stockés sur Nextcloud. Supporte .xlsx, .xls, .ods et .csv.

Les écritures utilisent xlsx-populate qui modifie uniquement les cellules demandées sans reconstruire le fichier — tableaux Excel nommés, styles, cellules fusionnées et mise en page sont préservés intégralement.

Sélection du fichier

Depuis  ▼  Depuis une liste  ← ou "Par chemin (expression)"
Dossier ▼  📁 Documents       ← liste à 2 niveaux
Fichier ▼  Arrêtés.xlsx       ← fichiers du dossier sélectionné

Resource : Sheet

Travaille sur les données d'une feuille de calcul. La première ligne est traitée comme en-tête par défaut.

Paramètre clé : Header Row — numéro de la ligne contenant les en-têtes (défaut : 1). Tous les dropdowns de colonnes se rechargent automatiquement quand cette valeur change.

| Opération | Description | |---|---| | Get Rows | Retourne toutes les lignes en tant qu'items n8n | | Append Row | Ajoute une ligne à la fin (hérite des styles de la ligne précédente) | | Update Row | Modifie une ligne existante par son numéro | | Delete Row | Supprime une ligne par son numéro | | Get Columns | Retourne la liste des en-têtes de colonnes | | Clear | Supprime toutes les lignes de données en conservant l'en-tête |

Options pour Get Rows (Sheet) :

| Option | Défaut | Description | |---|---|---| | Return Last N Rows | 0 (= toutes) | Retourner seulement les N dernières lignes | | Start From Column | 1 | Ignorer les colonnes avant la position N | | Column Names or IDs | (toutes) | Sélectionner les colonnes à inclure dans la sortie |

Resource : Table

Travaille sur une table Excel nommée (créée via Insertion → Tableau dans Excel, Ctrl+T).

| Opération | Description | |---|---| | List | Liste toutes les tables nommées du classeur | | Get Rows | Retourne les lignes de la table (filtres et options disponibles) | | Append Row | Ajoute une ligne et étend automatiquement la plage de la table | | Update Row | Modifie une ligne par son numéro dans la table | | Delete Row | Supprime une ligne et rétracte la plage de la table | | Get Columns | Retourne les en-têtes de colonnes de la table |

Options et filtres pour Get Rows (Table) :

| Option / Champ | Description | |---|---| | Include Row Number | Ajoute __rowNumber à chaque item (1 = première ligne de données). Attribué avant les filtres — reflète la position réelle dans la table. Utilisez-le dans Update Row ou Delete Row pour cibler la ligne exacte. | | Return Last N Rows | Retourner seulement les N dernières lignes | | Start From Column | Ignorer les colonnes avant la position N | | Filters | Filtrer les lignes par valeur de colonne (plusieurs filtres = logique AND) | | Column Names or IDs | Sélectionner les colonnes à inclure dans la sortie |

Workflow : trouver et modifier une ligne précise

1. Get Rows (Table)
   ├─ Table   : Suivi
   ├─ Options : Include Row Number ✓
   └─ Filters : N° = {{ $json.numero }}

2. Update Row (Table)
   ├─ Table      : Suivi
   ├─ Row Number : {{ $json.__rowNumber }}
   └─ Column Values : Statut → Validé

Resource : Workbook

| Opération | Description | |---|---| | Get Sheets | Retourne tous les noms de feuilles du classeur | | Get Tables | Retourne toutes les tables nommées de toutes les feuilles |


Node — NextCloud Search

Recherche une valeur dans une colonne d'un fichier tableur Nextcloud et retourne la valeur d'une autre colonne sur la même ligne — l'équivalent d'un VLOOKUP / RECHERCHEV directement dans n8n.

L'item d'entrée est enrichi avec les valeurs trouvées. Plusieurs lookups peuvent être configurés en une seule exécution (un seul téléchargement du fichier).

Sélection de la source

Source Type ▼  Sheet  ← ou "Table" (table Excel nommée)
From        ▼  From List
Dossier     ▼  📁 Documents
Fichier     ▼  catalogue.xlsx
Sheet       ▼  Tarifs         ← ou "Table" si Source Type = Table

Lookups

Chaque entrée du bloc Lookups configure une recherche indépendante :

| Champ | Exemple | Description | |---|---|---| | Search Column | Nom du matériel | Colonne où chercher (dropdown auto-chargé depuis le fichier) | | Search Value | {{ $json.materiel_nom_1 }} | Valeur à trouver — supporte les expressions n8n | | Return Column | Prix | Colonne dont la valeur est retournée (dropdown auto-chargé depuis le fichier) | | Output Field Name | materiel_prix_1 | Nom du champ JSON écrit dans l'item de sortie |

Exemple de résultat avec Pass Through activé (défaut) :

{
  "materiel_nom_1": "Table",
  "materiel_prix_1": "50€"
}

Options

| Option | Défaut | Description | |---|---|---| | Case Sensitive | false | Correspondance exacte de la casse | | If Not Found | Set to Null | Set to Null : null silencieux · Throw Error : arrêt avec erreur | | Pass Through Original Data | true | Conserver tous les champs d'entrée dans l'item de sortie |

Workflow typique — enrichir un bon de commande

Webhook (reçoit materiel_nom_1 = "Table")
  → NextCloud Search
      Lookup 1 : Nom du matériel = {{ $json.materiel_nom_1 }} → Prix → materiel_prix_1
      Lookup 2 : Nom du matériel = {{ $json.materiel_nom_2 }} → Prix → materiel_prix_2
  → NextCloud Doc Template (utilise materiel_prix_1, materiel_prix_2 dans le template)

Node — NextCloud Doc Template

Génère des documents Word (DOCX) ou LibreOffice Writer (ODT) à partir de templates stockés sur Nextcloud, en utilisant le moteur Carbone — syntaxe identique à n8n-nodes-carbonejs.

Syntaxe Carbone dans les templates

| Placeholder dans le document | Description | |---|---| | {d.nom} | Valeur simple | | {d.date:formatD('DD/MM/YYYY')} | Date formatée | | {d.montant:toFixed(2)} | Nombre avec 2 décimales | | {d.lignes[i].designation} | Début de boucle — répète la ligne/section pour chaque item du tableau | | {d.lignes[i+1].designation} | Fin de boucle (dernière cellule de la boucle) | | {d.actif ? 'Oui' : 'Non'} | Condition ternaire | | {!d.champ} | Affiché uniquement si vide/falsy |

Important : tapez les accolades { } directement au clavier dans du texte normal dans Word. N'utilisez pas Insertion → Champ (Ctrl+F9).

Opération : Fill Template

Sélection du template :

Template From   ▼  From List
Template Folder ▼  📁 Templates
Template File   ▼  contrat.docx

Ou mode By Path (Expression) pour un chemin dynamique.

Mode de données :

| Mode | Utilisation | |---|---| | Key-Value Pairs | Saisie variable par variable. Le dropdown Variable Name or ID charge automatiquement tous les {d.xxx} trouvés dans le template. | | JSON Object | Passage d'un objet JSON complet — obligatoire pour les boucles et les pages dynamiques. Supporte les expressions n8n : ={{ { "lignes": $json.items } }} |

Format de sortie :

| Format | Dépendance | |---|---| | DOCX (défaut) | Aucune — fonctionne sur toutes les installations n8n | | PDF | Nécessite LibreOffice installé sur le serveur n8n |

Mode de sortie — Save to Nextcloud :

Output Destination  ▼  Select Folder + File Name
Output Folder       ▼  📁 Documents / Filled
Output File Name       contrat_{{ $json.client }}.docx

Ou mode By Path (Expression) pour un chemin complet dynamique.

Mode de sortie — Return as Binary :

Binary Property  : data
Output File Name : contrat_{{ $json.client }}.docx

Opération : Get Variables

Scanne le template et retourne tous les placeholders {d.xxx} trouvés.

{
  "variables": ["{d.nom}", "{d.date}", "{d.lignes[i].designation}"],
  "rawKeys": ["nom", "date", "lignes[i].designation"],
  "count": 3,
  "templatePath": "/Templates/contrat.docx"
}

NextCloud Doc Template — Annexes conditionnelles

Cette fonctionnalité permet d'ajouter automatiquement des fichiers DOCX supplémentaires (règlements, schémas, annexes légales…) à la fin du document généré, selon des conditions évaluées à l'exécution. Un saut de page est inséré automatiquement avant chaque annexe.

Exemple : template principal (2 pages) + annexe trottoir (1 page) + annexe chaussée (1 page) → document final de 4 pages, sans créer de template combiné.

Configuration

1. Sélectionner le dossier des annexes (partagé) :

Annexes Folder  ▼  📁 Templates / Annexes

2. Ajouter une entrée par annexe ([+ Add Annexe]) :

Condition — Value to Check : {{ $json.trottoir }}
Condition                  : Is Not Empty ▼
Annexe File                : annexe_trottoir.docx ▼   ← dropdown chargé depuis Annexes Folder
Or: Annexe File Path       : (vide)

Conditions disponibles

| Condition | L'annexe est ajoutée quand… | |---|---| | Is Not Empty | La valeur n'est pas vide / null / 0 / false | | Equals | La valeur correspond exactement à Compare To | | Not Equals | La valeur est différente de Compare To | | Contains | La valeur contient la chaîne Compare To | | Always Append | Toujours ajouter, quelle que soit la valeur |

Chemin dynamique par expression

Le champ Or: Annexe File Path (Expression) prend la priorité sur le dropdown — utile quand le nom du fichier dépend d'une donnée du workflow :

Or: Annexe File Path : /Templates/Annexes/annexe_{{ $json.type_voirie }}.docx

Cumul de plusieurs annexes

Toutes les annexes dont la condition est vraie sont fusionnées dans l'ordre de la liste. La fusion gère les images (copie et renommage automatique pour éviter les conflits de rId) et les hyperliens.

[Annexe 1] trottoir   Is Not Empty → annexe_trottoir.docx   ✓ ajoutée
[Annexe 2] chaussee   Is Not Empty → annexe_chaussee.docx   ✗ ignorée (champ vide)
[Annexe 3] securite   Equals "Barrières" → annexe_barriere.docx  ✓ ajoutée

Résultat : template (2p) + annexe_trottoir (1p) + annexe_barriere (1p) = 4 pages

Node — NextCloud Doc Template (suite)

Formateurs Carbone

| Formateur | Résultat | |---|---| | {d.montant:toFixed(2)} | 1500.00 | | {d.date:formatD('DD/MM/YYYY')} | 15/05/2025 | | {d.nom:upper()} | MARTIN | | {d.nom:ucFirst()} | Martin | | {d.note:ifEmpty('N/A')} | N/A si vide | | {d.montant:convCurr('EUR','fr-FR')} | 1 500,00 € |


Node — NextCloud PDF

Lit, extrait le texte et remplit les champs de formulaires PDF stockés sur Nextcloud.

Opération : Get Fields

Extrait tous les champs d'un formulaire AcroForm interactif (PDF non aplati). Retourne un JSON structuré avec deux niveaux :

  • values : objet plat { NomChamp: valeur } — utilisable directement dans les expressions ($json.values.NomChamp)
  • fields : tableau détaillé avec name, type, value, options, required, readOnly

Si Get Fields retourne 0 champs, le PDF est probablement aplati — utilisez Get Text ou le node NextCloud OCR.

Types de champs supportés :

| Type | Description | Valeur retournée | |---|---|---| | text | Champ texte | string | | checkbox | Case à cocher | true / false | | radio | Bouton radio | string (option sélectionnée) | | dropdown | Liste déroulante | string | | optionList | Liste à sélection multiple | string[] | | signature | Champ de signature | null | | button | Bouton | null |

Opération : Get Text

Extrait le texte brut page par page depuis la couche texte du PDF, sans OCR. Fonctionne sur les PDFs aplatis remplis numériquement (CERFA numérique, formulaires administratifs, etc.) dont le texte est vectoriel mais non sélectionnable comme champs AcroForm.

{
  "pdfPath": "/cerfa_14023.pdf",
  "text": "DÉCLARATION DE CESSION\nVendeur : DUPONT Jean\nMarque : Renault...",
  "pageCount": 2,
  "pages": [
    { "page": 1, "text": "DÉCLARATION DE CESSION\n..." },
    { "page": 2, "text": "..." }
  ]
}

Si text est vide ou illisible, le PDF est scanné (image) — utilisez le node NextCloud OCR avec Docling.

Opération : Fill Fields

Mode de saisie :

| Mode | Description | |---|---| | Paires Clé-Valeur | Le dropdown Nom du champ charge automatiquement tous les champs du PDF avec leur type et leurs options. | | Objet JSON | Passage d'un objet JSON complet — idéal pour les webhooks : ={{ $json.body }} |

Valeurs acceptées pour les cases à cocher :

| Coché | Non coché | |---|---| | Oui, Yes, True, 1, Vrai, checked, on | Non, No, False, 0, Faux |

(insensible à la casse)

Option Aplatir le formulaire : les champs deviennent du texte imprimé non modifiable. Fonctionne même si certains champs n'ont pas été remplis — les champs vides sont aplatis comme espace blanc.

Mode de sortie — Save to Nextcloud :

Destination de sortie   ▼  Choisir un dossier + nom de fichier
Dossier de sortie       ▼  📁 Documents / Remplis
Nom du fichier de sortie   formulaire_{{ $json["Nom"] }}.pdf

Ou mode Par chemin complet (expression).



Node — NextCloud OCR

Extrait le texte de fichiers PDF stockés sur Nextcloud via un moteur OCR externe. Conçu pour les PDFs scannés (image) ou aplatis sans couche texte exploitable.

Pour les PDFs remplis numériquement (texte vectoriel), préférez NextCloud PDF → Get Text qui est plus rapide et ne nécessite aucun serveur externe.

Choisir le bon outil

| Situation | Node recommandé | |---|---| | PDF interactif avec champs AcroForm | NextCloud PDF → Get Fields | | PDF aplati rempli numériquement (texte sélectionnable) | NextCloud PDF → Get Text | | PDF scanné ou texte non sélectionnable | NextCloud OCR → Docling ou Mistral |

Moteur : Docling (local)

Envoie le PDF au serveur docling-serve auto-hébergé. Idéal pour les environnements self-hosted — aucune donnée ne quitte votre infrastructure.

| Paramètre | Défaut | Description | |---|---|---| | URL du serveur | http://localhost:5001 | URL de base du serveur docling-serve | | Version API | /v1alpha/convert/source | Chemin de l'endpoint — sélectionner selon la version installée |

Versions API :

| Version Docling-serve | Chemin | |---|---| | ≤ 0.4 | /v1alpha/convert/source | | ≥ 0.5 | /v1/convert/source | | Autre | Personnalisé (champ libre) |

Démarrer Docling en local (Docker) :

docker run -p 5001:5001 ds4sd/docling-serve

Moteur : Mistral OCR

Envoie le PDF (encodé base64) à l'API Mistral OCR.

| Paramètre | Défaut | Description | |---|---|---| | Clé API Mistral | — | Créer sur console.mistral.ai/api-keys | | Modèle | mistral-ocr-latest | Identifiant du modèle OCR |

Sortie

{
  "pdfPath": "/cerfa_14023.pdf",
  "provider": "docling",
  "text": "DÉCLARATION DE CESSION\nVendeur : DUPONT Jean\n...",
  "markdown": "# DÉCLARATION DE CESSION\n\n**Vendeur :** DUPONT Jean\n...",
  "pageCount": 2,
  "pages": [
    { "index": 0, "text": "...", "markdown": "..." }
  ]
}

pages[] est peuplé par les providers qui retournent une pagination (Mistral). markdown préserve la structure du document (titres, tableaux) — préférable pour le post-traitement AI.

Option : Inclure la réponse brute

Activez Inclure la réponse brute pour voir la réponse complète du provider dans le champ raw — utile pour diagnostiquer des problèmes ou explorer les métadonnées disponibles.


Workflow CERFA — Extraire les champs d'un formulaire aplati

NextCloud PDF → Get Text
  (si text vide → NextCloud OCR avec Docling)
    ↓
Node AI (OpenAI / Claude)
  Prompt : "Voici le texte d'un CERFA N°14023*01 (déclaration de cession).
            Extrais en JSON : nom_vendeur, prenom_vendeur, adresse_vendeur,
            nom_acheteur, prenom_acheteur, adresse_acheteur, marque, modele,
            immatriculation, vin, date_cession, kilometrage.
            Si absent → null."
    ↓
Utiliser les champs extraits dans le reste du workflow

Chemins Nextcloud

Tous les chemins sont relatifs à la racine de votre espace Nextcloud :

/                                → racine
/Documents/rapport.xlsx          → fichier dans Documents
/Templates/Annexes/trottoir.docx → sous-dossier

Workflows typiques

Contrat depuis un formulaire n8n

Form Trigger → NextCloud Doc Template (Fill Template, Return Binary) → Send Email

Remplir un PDF depuis un webhook

Webhook → NextCloud PDF (Fill Fields, Save to Nextcloud)

Facture avec tableau de lignes dynamiques

HTTP Request → NextCloud Doc Template (JSON Object mode, {d.lignes[i].xxx})

Demande avec annexes conditionnelles

Webhook → NextCloud Doc Template (Fill Template + Conditional Annexes)

Extraire les données d'un CERFA rempli numériquement (aplati)

NextCloud PDF (Get Text) → Node AI → traitement des champs extraits

Extraire les données d'un CERFA scanné

NextCloud OCR (Docling) → Node AI → traitement des champs extraits

Développement local

git clone https://github.com/wdebonne/n8n-nodes-nextcloud-ext.git
cd n8n-nodes-nextcloud-ext

NODE_OPTIONS=--use-system-ca npm install
npm run build   # TypeScript → dist/
npm run dev     # mode watch

Tester dans n8n

npm run build && npm link
# Dans le répertoire de données n8n :
npm link n8n-nodes-nextcloud-ext

Roadmap

  • [ ] Support OAuth2 Nextcloud (PKCE)
  • [ ] Node Nextcloud Talk (messages, salons)
  • [ ] Node Nextcloud Contacts (CardDAV)
  • [ ] Node Nextcloud Calendar (CalDAV)

Licence

MIT — © 2025 wdebonne


Liens