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:
- Must be a non-empty string.
- After
Path.resolve()it must live under eitherPath.home()orPath.cwd(). - It may not live under a well-known system root (
/etc,/Windows,/System,/Program Files, …) — guards against theHOME=/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.
Metadata
Release files for concinno-skills-office 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| concinno_skills_office-0.1.0.tar.gz | 37.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| concinno_skills_office-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.1 kB
Release files / concinno_skills_office-0.1.0.tar.gz
| Download URL | concinno_skills_office-0.1.0.tar.gz |
|---|---|
| Size | 37.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7f08ad220bf22cc6c76c6c71cd3a58c51c3a52a0bad7142feb2cab51edb4344a
|
|
BLAKE2b-256 checksum How to use checksums |
c548b01f37b017727d534801a10a7f4d1a09ee0e6432d91ab5f080885b8e0468
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / concinno_skills_office-0.1.0-py3-none-any.whl
| Download URL | concinno_skills_office-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fb7378b7ca586cc328018bc40b97dc9cf09ad9c15b66faf984cb5fefdf8e11ea
|
|
BLAKE2b-256 checksum How to use checksums |
2fd37e509c2e3c3cd69775bf4cc4fe99c1671ac51b27e57d72be44dd8957aebf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|