Skip to content

This release adds 1 notable feature for engineering teams evaluating rollout.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

compound-file deterministic excel file-format macro-extraction ms-cfb
+13 more
ms-ovba office-automation openxml pure-python python roundtrip vba vba-macros xlam xls xlsb xlsm zero-dependencies

Summary

AI summary

Added ExcelFile.create_new(path) to generate a fresh macro‑enabled workbook programmatically.

Full changelog

Added

  • ExcelFile.create_new(path) -- create a brand-new macro-enabled
    workbook from scratch in pure Python, without ever launching Excel.
    The new file ships with a fresh VBA project containing ThisWorkbook,
    Sheet1, and an empty Module1, opens cleanly in Excel with no
    "found a problem with some content" repair prompt, and is ready for
    immediate edits via the normal vba_project() / save() flow.
  • New TestExcelFileCreateNew test class covering write-out, expected
    modules, empty Module1, round-trip with user code, overwrite of an
    existing file, and creation of missing parent directories.

Internal

  • New src/pyopenvba/_templates/__init__.py module embedding a
    byte-for-byte clone of a freshly Excel-authored empty .xlsm as a
    zlib-compressed base85 constant. No binary fixtures are shipped in the
    wheel; the template is regenerated by scripts/bake_empty_template.py
    from tests/live_excel_testing/freshly_touched.xlsm.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track WilliamSmithEdward/pyOpenVBA

Get notified when new releases ship.

Sign up free

About WilliamSmithEdward/pyOpenVBA

All releases →

Related context

Earlier breaking changes

  • v3.0.0 Renamed the `AccessFile` class to `AccessReader`.
  • v3.0.0 Renamed `pyopenvba.access` module to `pyopenvba.access_read`.
  • v1.1.1 `add_module(kind=other)` now requires an explicit attribute header; automatic synthesis is disabled.

Beta — feedback welcome: [email protected]