Skip to main content

Local Office document skills (Word/Excel/PowerPoint/docx-template) for Concinno — native Python libraries, no MS 365 API. docxtpl LGPL-2.1 dynamic link.

Project description

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.

Project details


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.

Supported by

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