Skip to main content

concinno-skills-office

Local Office document skills for Concinno. Native Python libraries, no Microsoft 365 / Graph API round-trip, no network.

Status

MVP (0.1.0) — five tools covering the core four-quadrant of local Office document creation:

Tool Library Purpose
WordCreate python-docx build a .docx from heading / paragraphs / tables
ExcelWrite openpyxl build a .xlsx, write rows and formulas
ExcelChart XlsxWriter build a .xlsx containing a bar / line / pie chart
PptCreate python-pptx build a .pptx from a list of slide dicts
DocxTemplate docxtpl render a Jinja2 .docx template

Future versions will extend the existing tools (images, styles, more chart types) without bumping Concinno itself. A separate concinno-skills-office-365 sibling package will host the Microsoft Graph API path when it ships; this package will never gain a cloud dependency.

Install

pip install concinno-skills-office

All five document libraries are hard dependencies — pulled in automatically. The package is useless without them.

License notes

The package itself is Apache-2.0. However docxtpl is licensed under LGPL-2.1. We depend on it as a pip dependency — a dynamic link — so the re-link rights the LGPL requires are preserved for any downstream consumer that pip-installs Office skills the normal way.

If you statically bundle this package into a single-file binary (e.g. PyInstaller with --onefile) the bundle's redistribution terms must satisfy LGPL-2.1 §6 for the docxtpl code path specifically. The upstream docxtpl project lives at https://github.com/elapouya/python-docx-template.

Safety

Every tool validates its output_path / template_path kwarg before touching disk:

  1. Must be a non-empty string.
  2. After Path.resolve() it must live under either Path.home() or Path.cwd().
  3. It may not live under a well-known system root (/etc, /Windows, /System, /Program Files, …) — guards against the HOME=/ edge case.

Violations return {"error": "..."} rather than writing the file.

Usage via Concinno ToolRegistry

When the consumer sets CONCINNO_LOAD_PLUGINS=1, the default registry auto-mounts all five tools:

import os
os.environ["CONCINNO_LOAD_PLUGINS"] = "1"

from concinno.tools.registry import get_default_registry

reg = get_default_registry()
for name in (
    "WordCreate",
    "ExcelWrite",
    "ExcelChart",
    "PptCreate",
    "DocxTemplate",
):
    assert name in reg.list_deferred()

Direct Python usage

from concinno_skills_office import (
    WordCreate, ExcelWrite, ExcelChart, PptCreate, DocxTemplate,
)

# Word: heading + paragraphs + a table.
WordCreate().call(
    action="create",
    output_path="./report.docx",
    heading="Quarterly Report",
    paragraphs=["Summary paragraph.", "Details below."],
    tables=[[["Metric", "Value"], ["Revenue", "$1.2M"]]],
)

# Excel: rows + formula.
ExcelWrite().call(
    action="create",
    output_path="./sheet.xlsx",
    sheet="Sales",
    rows=[
        ["Name", "Units", "Total"],
        ["A", 10, "=B2*5"],
        ["B", 20, "=B3*5"],
    ],
)

# Excel + chart.
ExcelChart().call(
    action="create",
    output_path="./chart.xlsx",
    sheet="Data",
    rows=[["Q1", 10], ["Q2", 20], ["Q3", 15], ["Q4", 30]],
    chart={
        "type": "bar",
        "title": "Quarterly",
        "categories": "A1:A4",
        "values": "B1:B4",
    },
)

# PowerPoint.
PptCreate().call(
    action="create",
    output_path="./deck.pptx",
    slides=[
        {"title": "Agenda", "content": ["Intro", "Body", "Q&A"]},
        {"title": "Outro", "content": ["Thanks."]},
    ],
)

# Docx template render.
DocxTemplate().call(
    action="render",
    template_path="./letter_template.docx",
    context={"name": "Alice", "date": "2026-04-22"},
    output_path="./letter_alice.docx",
)

All tools return either {"ok": True, ...} on success or {"error": "..."} on any validation or library failure — matching the shape of other Concinno built-in tools.

License

Apache-2.0. See LICENSE in the Concinno monorepo.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

concinno_skills_office-0.1.0.tar.gz (37.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

concinno_skills_office-0.1.0-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

File details

Details for the file concinno_skills_office-0.1.0.tar.gz.

File metadata

  • Download URL: concinno_skills_office-0.1.0.tar.gz
  • Upload date:
  • Size: 37.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for concinno_skills_office-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7f08ad220bf22cc6c76c6c71cd3a58c51c3a52a0bad7142feb2cab51edb4344a
MD5 12f5f2612c5726171f52a73296eca626
BLAKE2b-256 c548b01f37b017727d534801a10a7f4d1a09ee0e6432d91ab5f080885b8e0468

See more details on using hashes here.

File details

Details for the file concinno_skills_office-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for concinno_skills_office-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fb7378b7ca586cc328018bc40b97dc9cf09ad9c15b66faf984cb5fefdf8e11ea
MD5 93b8344b51d245070f1bcdc6eb193bf0
BLAKE2b-256 2fd37e509c2e3c3cd69775bf4cc4fe99c1671ac51b27e57d72be44dd8957aebf

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page