{
  "schemaVersion": "1.0",
  "item": {
    "slug": "xlsx-pro",
    "name": "Xlsx Pro",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/ricobaboule/xlsx-pro",
    "canonicalUrl": "https://clawhub.ai/ricobaboule/xlsx-pro",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/xlsx-pro",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=xlsx-pro",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/office/__init__.py",
      "scripts/office/soffice.py",
      "scripts/recalc.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/xlsx-pro"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/xlsx-pro",
    "agentPageUrl": "https://openagent3.xyz/skills/xlsx-pro/agent",
    "manifestUrl": "https://openagent3.xyz/skills/xlsx-pro/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/xlsx-pro/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "TL;DR",
        "body": "Génère/édite des fichiers Excel avec des formules (pas des valeurs hardcodées).\nOptionnel: recalcul via LibreOffice headless + détection d’erreurs Excel.\nLivrable attendu: un fichier tableur propre (XLSX/XLSM/CSV/TSV)."
      },
      {
        "title": "Dépendances Python",
        "body": "pip install openpyxl pandas xlrd xlwt"
      },
      {
        "title": "LibreOffice (pour recalcul des formules)",
        "body": "# Ubuntu/Debian\nsudo apt-get install libreoffice-calc libreoffice-common"
      },
      {
        "title": "Police Professionnelle",
        "body": "Utiliser une police cohérente (Arial, Times New Roman) sauf instruction contraire"
      },
      {
        "title": "Zéro Erreur de Formule",
        "body": "Tout fichier Excel DOIT être livré SANS erreurs (#REF!, #DIV/0!, #VALUE!, #N/A, #NAME?)"
      },
      {
        "title": "Préservation des Templates",
        "body": "Respecter EXACTEMENT le format et style existants lors de modifications\nLes conventions du template préexistant ont TOUJOURS priorité"
      },
      {
        "title": "Code Couleur (Standards Industrie)",
        "body": "Texte bleu (RGB: 0,0,255) : Inputs hardcodés, valeurs modifiables\nTexte noir (RGB: 0,0,0) : TOUTES les formules et calculs\nTexte vert (RGB: 0,128,0) : Liens vers autres feuilles du même classeur\nTexte rouge (RGB: 255,0,0) : Liens externes vers autres fichiers\nFond jaune (RGB: 255,255,0) : Hypothèses clés ou cellules à mettre à jour"
      },
      {
        "title": "Formatage des Nombres",
        "body": "Années : Format texte (\"2024\" pas \"2,024\")\nDevises : Format $#,##0 ; spécifier unités dans les en-têtes (\"Revenue ($mm)\")\nZéros : Afficher comme \"-\" (format: \"$#,##0;($#,##0);-\")\nPourcentages : Format 0.0% par défaut\nMultiples : Format 0.0x (EV/EBITDA, P/E)\nNégatifs : Parenthèses (123) pas moins -123"
      },
      {
        "title": "CRITIQUE : Utiliser des Formules, PAS des Valeurs Hardcodées",
        "body": "TOUJOURS utiliser des formules Excel au lieu de calculer en Python et hardcoder."
      },
      {
        "title": "❌ MAUVAIS - Hardcoding",
        "body": "# Mauvais: Calcul Python puis hardcode\ntotal = df['Sales'].sum()\nsheet['B10'] = total  # Hardcode 5000\n\n# Mauvais: Taux de croissance calculé en Python\ngrowth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']\nsheet['C5'] = growth  # Hardcode 0.15"
      },
      {
        "title": "✅ CORRECT - Formules Excel",
        "body": "# Bon: Laisser Excel calculer\nsheet['B10'] = '=SUM(B2:B9)'\n\n# Bon: Taux de croissance en formule Excel\nsheet['C5'] = '=(C4-C2)/C2'\n\n# Bon: Moyenne en fonction Excel\nsheet['D20'] = '=AVERAGE(D2:D19)'"
      },
      {
        "title": "Workflow Standard",
        "body": "Choisir l'outil : pandas pour données, openpyxl pour formules/formatage\nCréer/Charger : Nouveau classeur ou fichier existant\nModifier : Données, formules, formatage\nSauvegarder : Écrire le fichier\nRecalculer (OBLIGATOIRE si formules) : python scripts/recalc.py output.xlsx\nVérifier et corriger les erreurs détectées"
      },
      {
        "title": "Lecture et Analyse avec pandas",
        "body": "import pandas as pd\n\n# Lire Excel\ndf = pd.read_excel('file.xlsx')  # Première feuille par défaut\nall_sheets = pd.read_excel('file.xlsx', sheet_name=None)  # Dict de toutes les feuilles\n\n# Analyser\ndf.head()      # Aperçu\ndf.info()      # Info colonnes\ndf.describe()  # Statistiques\n\n# Écrire\ndf.to_excel('output.xlsx', index=False)"
      },
      {
        "title": "Création de Fichiers Excel",
        "body": "from openpyxl import Workbook\nfrom openpyxl.styles import Font, PatternFill, Alignment\n\nwb = Workbook()\nsheet = wb.active\n\n# Données\nsheet['A1'] = 'Hello'\nsheet['B1'] = 'World'\nsheet.append(['Row', 'of', 'data'])\n\n# Formule\nsheet['B2'] = '=SUM(A1:A10)'\n\n# Formatage\nsheet['A1'].font = Font(bold=True, color='FF0000')\nsheet['A1'].fill = PatternFill('solid', start_color='FFFF00')\nsheet['A1'].alignment = Alignment(horizontal='center')\n\n# Largeur colonne\nsheet.column_dimensions['A'].width = 20\n\nwb.save('output.xlsx')"
      },
      {
        "title": "Édition de Fichiers Existants",
        "body": "from openpyxl import load_workbook\n\n# Charger fichier existant\nwb = load_workbook('existing.xlsx')\nsheet = wb.active  # ou wb['NomFeuille']\n\n# Parcourir les feuilles\nfor sheet_name in wb.sheetnames:\n    sheet = wb[sheet_name]\n    print(f\"Feuille: {sheet_name}\")\n\n# Modifier\nsheet['A1'] = 'Nouvelle Valeur'\nsheet.insert_rows(2)  # Insérer ligne\nsheet.delete_cols(3)  # Supprimer colonne\n\n# Ajouter feuille\nnew_sheet = wb.create_sheet('NouvelleFeuille')\nnew_sheet['A1'] = 'Data'\n\nwb.save('modified.xlsx')"
      },
      {
        "title": "Recalcul des Formules",
        "body": "Les fichiers créés par openpyxl contiennent les formules comme chaînes mais pas les valeurs calculées. Utiliser le script recalc.py :\n\npython scripts/recalc.py <fichier_excel> [timeout_secondes]\n\nLe script :\n\nConfigure automatiquement la macro LibreOffice au premier lancement\nRecalcule toutes les formules\nScanne TOUTES les cellules pour erreurs Excel\nRetourne JSON avec détails et emplacements des erreurs"
      },
      {
        "title": "Interprétation de la Sortie",
        "body": "{\n  \"status\": \"success\",           // ou \"errors_found\"\n  \"total_errors\": 0,             // Nombre total d'erreurs\n  \"total_formulas\": 42,          // Nombre de formules\n  \"error_summary\": {             // Présent si erreurs\n    \"#REF!\": {\n      \"count\": 2,\n      \"locations\": [\"Sheet1!B5\", \"Sheet1!C10\"]\n    }\n  }\n}"
      },
      {
        "title": "Vérifications Essentielles",
        "body": "Tester 2-3 références : Vérifier qu'elles tirent les bonnes valeurs\n Mapping colonnes : Confirmer correspondance (colonne 64 = BL, pas BK)\n Offset lignes : Excel est 1-indexé (DataFrame row 5 = Excel row 6)"
      },
      {
        "title": "Pièges Courants",
        "body": "Gestion NaN : Vérifier valeurs nulles avec pd.notna()\n Colonnes éloignées : Données FY souvent en colonnes 50+\n Correspondances multiples : Chercher toutes les occurrences\n Division par zéro : Vérifier dénominateurs (#DIV/0!)\n Références invalides : Vérifier que toutes pointent vers cellules existantes (#REF!)\n Références inter-feuilles : Format correct (Sheet1!A1)"
      },
      {
        "title": "Sélection de Bibliothèque",
        "body": "pandas : Analyse de données, opérations en masse, export simple\nopenpyxl : Formatage complexe, formules, fonctionnalités Excel spécifiques"
      },
      {
        "title": "Avec openpyxl",
        "body": "Indices de cellules en base 1 (row=1, column=1 = cellule A1)\ndata_only=True pour lire valeurs calculées\nAttention : Sauvegarder après data_only=True remplace définitivement les formules par les valeurs\nPour gros fichiers : read_only=True ou write_only=True"
      },
      {
        "title": "Avec pandas",
        "body": "Spécifier types de données : pd.read_excel('file.xlsx', dtype={'id': str})\nPour gros fichiers, colonnes spécifiques : usecols=['A', 'C', 'E']\nGestion des dates : parse_dates=['date_column']"
      },
      {
        "title": "Style de Code",
        "body": "IMPORTANT : Code Python minimal et concis, sans commentaires superflus.\n\nPour les fichiers Excel :\n\nCommenter les cellules avec formules complexes\nDocumenter les sources des données hardcodées\nInclure notes pour calculs clés"
      }
    ],
    "body": "Compétence Excel pour OpenClawd\nTL;DR\nGénère/édite des fichiers Excel avec des formules (pas des valeurs hardcodées).\nOptionnel: recalcul via LibreOffice headless + détection d’erreurs Excel.\nLivrable attendu: un fichier tableur propre (XLSX/XLSM/CSV/TSV).\nPrérequis\nDépendances Python\npip install openpyxl pandas xlrd xlwt\n\nLibreOffice (pour recalcul des formules)\n# Ubuntu/Debian\nsudo apt-get install libreoffice-calc libreoffice-common\n\nRègles de Qualité\nPolice Professionnelle\nUtiliser une police cohérente (Arial, Times New Roman) sauf instruction contraire\nZéro Erreur de Formule\nTout fichier Excel DOIT être livré SANS erreurs (#REF!, #DIV/0!, #VALUE!, #N/A, #NAME?)\nPréservation des Templates\nRespecter EXACTEMENT le format et style existants lors de modifications\nLes conventions du template préexistant ont TOUJOURS priorité\nStandards pour Modèles Financiers\nCode Couleur (Standards Industrie)\nTexte bleu (RGB: 0,0,255) : Inputs hardcodés, valeurs modifiables\nTexte noir (RGB: 0,0,0) : TOUTES les formules et calculs\nTexte vert (RGB: 0,128,0) : Liens vers autres feuilles du même classeur\nTexte rouge (RGB: 255,0,0) : Liens externes vers autres fichiers\nFond jaune (RGB: 255,255,0) : Hypothèses clés ou cellules à mettre à jour\nFormatage des Nombres\nAnnées : Format texte (\"2024\" pas \"2,024\")\nDevises : Format $#,##0 ; spécifier unités dans les en-têtes (\"Revenue ($mm)\")\nZéros : Afficher comme \"-\" (format: \"$#,##0;($#,##0);-\")\nPourcentages : Format 0.0% par défaut\nMultiples : Format 0.0x (EV/EBITDA, P/E)\nNégatifs : Parenthèses (123) pas moins -123\nCRITIQUE : Utiliser des Formules, PAS des Valeurs Hardcodées\n\nTOUJOURS utiliser des formules Excel au lieu de calculer en Python et hardcoder.\n\n❌ MAUVAIS - Hardcoding\n# Mauvais: Calcul Python puis hardcode\ntotal = df['Sales'].sum()\nsheet['B10'] = total  # Hardcode 5000\n\n# Mauvais: Taux de croissance calculé en Python\ngrowth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']\nsheet['C5'] = growth  # Hardcode 0.15\n\n✅ CORRECT - Formules Excel\n# Bon: Laisser Excel calculer\nsheet['B10'] = '=SUM(B2:B9)'\n\n# Bon: Taux de croissance en formule Excel\nsheet['C5'] = '=(C4-C2)/C2'\n\n# Bon: Moyenne en fonction Excel\nsheet['D20'] = '=AVERAGE(D2:D19)'\n\nWorkflows\nWorkflow Standard\nChoisir l'outil : pandas pour données, openpyxl pour formules/formatage\nCréer/Charger : Nouveau classeur ou fichier existant\nModifier : Données, formules, formatage\nSauvegarder : Écrire le fichier\nRecalculer (OBLIGATOIRE si formules) : python scripts/recalc.py output.xlsx\nVérifier et corriger les erreurs détectées\nLecture et Analyse avec pandas\nimport pandas as pd\n\n# Lire Excel\ndf = pd.read_excel('file.xlsx')  # Première feuille par défaut\nall_sheets = pd.read_excel('file.xlsx', sheet_name=None)  # Dict de toutes les feuilles\n\n# Analyser\ndf.head()      # Aperçu\ndf.info()      # Info colonnes\ndf.describe()  # Statistiques\n\n# Écrire\ndf.to_excel('output.xlsx', index=False)\n\nCréation de Fichiers Excel\nfrom openpyxl import Workbook\nfrom openpyxl.styles import Font, PatternFill, Alignment\n\nwb = Workbook()\nsheet = wb.active\n\n# Données\nsheet['A1'] = 'Hello'\nsheet['B1'] = 'World'\nsheet.append(['Row', 'of', 'data'])\n\n# Formule\nsheet['B2'] = '=SUM(A1:A10)'\n\n# Formatage\nsheet['A1'].font = Font(bold=True, color='FF0000')\nsheet['A1'].fill = PatternFill('solid', start_color='FFFF00')\nsheet['A1'].alignment = Alignment(horizontal='center')\n\n# Largeur colonne\nsheet.column_dimensions['A'].width = 20\n\nwb.save('output.xlsx')\n\nÉdition de Fichiers Existants\nfrom openpyxl import load_workbook\n\n# Charger fichier existant\nwb = load_workbook('existing.xlsx')\nsheet = wb.active  # ou wb['NomFeuille']\n\n# Parcourir les feuilles\nfor sheet_name in wb.sheetnames:\n    sheet = wb[sheet_name]\n    print(f\"Feuille: {sheet_name}\")\n\n# Modifier\nsheet['A1'] = 'Nouvelle Valeur'\nsheet.insert_rows(2)  # Insérer ligne\nsheet.delete_cols(3)  # Supprimer colonne\n\n# Ajouter feuille\nnew_sheet = wb.create_sheet('NouvelleFeuille')\nnew_sheet['A1'] = 'Data'\n\nwb.save('modified.xlsx')\n\nRecalcul des Formules\n\nLes fichiers créés par openpyxl contiennent les formules comme chaînes mais pas les valeurs calculées. Utiliser le script recalc.py :\n\npython scripts/recalc.py <fichier_excel> [timeout_secondes]\n\n\nLe script :\n\nConfigure automatiquement la macro LibreOffice au premier lancement\nRecalcule toutes les formules\nScanne TOUTES les cellules pour erreurs Excel\nRetourne JSON avec détails et emplacements des erreurs\nInterprétation de la Sortie\n{\n  \"status\": \"success\",           // ou \"errors_found\"\n  \"total_errors\": 0,             // Nombre total d'erreurs\n  \"total_formulas\": 42,          // Nombre de formules\n  \"error_summary\": {             // Présent si erreurs\n    \"#REF!\": {\n      \"count\": 2,\n      \"locations\": [\"Sheet1!B5\", \"Sheet1!C10\"]\n    }\n  }\n}\n\nChecklist de Vérification\nVérifications Essentielles\n Tester 2-3 références : Vérifier qu'elles tirent les bonnes valeurs\n Mapping colonnes : Confirmer correspondance (colonne 64 = BL, pas BK)\n Offset lignes : Excel est 1-indexé (DataFrame row 5 = Excel row 6)\nPièges Courants\n Gestion NaN : Vérifier valeurs nulles avec pd.notna()\n Colonnes éloignées : Données FY souvent en colonnes 50+\n Correspondances multiples : Chercher toutes les occurrences\n Division par zéro : Vérifier dénominateurs (#DIV/0!)\n Références invalides : Vérifier que toutes pointent vers cellules existantes (#REF!)\n Références inter-feuilles : Format correct (Sheet1!A1)\nBonnes Pratiques\nSélection de Bibliothèque\npandas : Analyse de données, opérations en masse, export simple\nopenpyxl : Formatage complexe, formules, fonctionnalités Excel spécifiques\nAvec openpyxl\nIndices de cellules en base 1 (row=1, column=1 = cellule A1)\ndata_only=True pour lire valeurs calculées\nAttention : Sauvegarder après data_only=True remplace définitivement les formules par les valeurs\nPour gros fichiers : read_only=True ou write_only=True\nAvec pandas\nSpécifier types de données : pd.read_excel('file.xlsx', dtype={'id': str})\nPour gros fichiers, colonnes spécifiques : usecols=['A', 'C', 'E']\nGestion des dates : parse_dates=['date_column']\nStyle de Code\n\nIMPORTANT : Code Python minimal et concis, sans commentaires superflus.\n\nPour les fichiers Excel :\n\nCommenter les cellules avec formules complexes\nDocumenter les sources des données hardcodées\nInclure notes pour calculs clés"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ricobaboule/xlsx-pro",
    "publisherUrl": "https://clawhub.ai/ricobaboule/xlsx-pro",
    "owner": "ricobaboule",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/xlsx-pro",
    "downloadUrl": "https://openagent3.xyz/downloads/xlsx-pro",
    "agentUrl": "https://openagent3.xyz/skills/xlsx-pro/agent",
    "manifestUrl": "https://openagent3.xyz/skills/xlsx-pro/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/xlsx-pro/agent.md"
  }
}