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:
- 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f08ad220bf22cc6c76c6c71cd3a58c51c3a52a0bad7142feb2cab51edb4344a
|
|
| MD5 |
12f5f2612c5726171f52a73296eca626
|
|
| BLAKE2b-256 |
c548b01f37b017727d534801a10a7f4d1a09ee0e6432d91ab5f080885b8e0468
|
File details
Details for the file concinno_skills_office-0.1.0-py3-none-any.whl.
File metadata
- Download URL: concinno_skills_office-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb7378b7ca586cc328018bc40b97dc9cf09ad9c15b66faf984cb5fefdf8e11ea
|
|
| MD5 |
93b8344b51d245070f1bcdc6eb193bf0
|
|
| BLAKE2b-256 |
2fd37e509c2e3c3cd69775bf4cc4fe99c1671ac51b27e57d72be44dd8957aebf
|