• ANNOUNCE: ooxml 1.13 released

    From =?UTF-8?Q?Alexander_Sch=C3=B6pe?=@ete-sep@mxbo.de to comp.lang.tcl on Thu Jul 2 23:45:19 2026
    From Newsgroup: comp.lang.tcl

    ANNOUNCE: ooxml 1.13 released
    =============================

    ooxml is a pure Tcl extension for reading and writing ECMA-376 Office
    Open XML files: it reads and writes Excel .xlsx spreadsheets and creates
    Word .docx documents. Developed by Alexander Schoepe with contributions
    by Rolf Ade, Harald Oehlmann and Miguel Ba|#||n, it requires only Tcl
    8.6.7+ and tdom.

    Highlight of this release: a built-in zip reader based on Tcl's core
    zlib command - reading .xlsx and .docx files no longer needs any
    additional package.

    Why a new release just one day after 1.12? Because when wrapping up 1.12
    we had plain forgotten to look at the open tickets. Sorry for that -
    1.13 makes up for it: all of them are fixed.

    Download / Repository: https://fossil.sowaswie.de/ooxml


    English
    -------

    New features since 1.12:

    * Built-in zip reader: xlsx and docx files are now read with ooxml's own reader based on the zlib command built into Tcl, on all platforms.
    Reading needs no external package anymore - no tcllib, no tclvfs, no
    Trf. The former backends (Tcl 9 zipfs, tcllib zipfile::decode, tclvfs
    vfs::zip >= 1.0.4) remain as automatic fallbacks for archives the
    built-in reader cannot handle (ZIP64, encrypted or exotically compressed entries).

    Fixes:

    * Reading failed with 'invalid command name "zip"' on installations
    where tcllib's zipfile::decode chose the decompression path via the Trf extension and Trf was not installed (ticket 0da3bc4b65). With the
    built-in reader this class of problems is gone entirely. Thanks to
    Torsten Berg for the report.
    * activeTab handling (ticket 3933595861): the validation in the write
    method compared the zero based tab index against the sheet count as a one-element list. Every valid "view -activetab" value was silently reset
    to 0, while the one invalid value slipped through - so deleting a sheet
    with arrayDeleteSheet and writing the workbook back via presetstyles/presetsheets could produce a file that Excel reports as
    corrupted and offers to repair. activeTab is now clamped to the valid
    range, and arrayDeleteSheet keeps the active tab pointing to the same
    sheet after the removal.
    * presetsheets errored out with 'key "u" not known in dictionary' on
    workbooks containing hyperlinks; hyperlinks and their tooltips now
    survive the read/preset/write roundtrip.
    * ./configure --prefix works now (ticket 1a64a34982): the TEA framework overwrote the exec_prefix with the one recorded in tclConfig.sh whenever --exec-prefix was not given, so the package always installed into the
    Tcl tree no matter what --prefix said. A user-given --prefix is
    respected now; without options the package still installs into the tree
    of the Tcl found by configure. The README describes the install locations.

    Build, tests and documentation:

    * make publish uploads the release artifacts under their plain names
    into the Fossil unversioned space (no more stray uv/ prefix).
    * New regression tests for the activeTab handling and the presetsheets hyperlink transfer (tests/xlsx-view.test); the benchmark test now
    measures with floating point precision and a real 10 percent tolerance
    instead of failing on integer-truncated noise. The suite has grown to
    625 tests (616 passed, 9 skipped, 0 failed).
    * The dependency documentation (README, man pages, wiki) reflects that
    reading needs no additional package anymore.


    Deutsch
    -------

    Neue Features seit 1.12:

    * Eingebauter Zip-Reader: xlsx- und docx-Dateien werden jetzt auf allen Plattformen mit ooxmls eigenem Reader auf Basis des in Tcl eingebauten zlib-Kommandos gelesen. Zum Lesen wird kein externes Paket mehr ben||tigt
    - kein tcllib, kein tclvfs, kein Trf. Die bisherigen Backends
    (Tcl-9-zipfs, tcllib zipfile::decode, tclvfs vfs::zip >= 1.0.4) bleiben
    als automatischer Fallback f|+r Archive erhalten, die der eingebaute
    Reader nicht verarbeiten kann (ZIP64, verschl|+sselte oder exotisch komprimierte Eintr|nge).

    Fehlerbehebungen:

    * Das Lesen scheiterte mit 'invalid command name "zip"' auf
    Installationen, bei denen tcllibs zipfile::decode den
    Dekomprimierungspfad |+ber die Trf-Erweiterung w|nhlte und Trf nicht installiert war (Ticket 0da3bc4b65). Mit dem eingebauten Reader ist
    diese Fehlerklasse komplett verschwunden. Dank an Torsten Berg f|+r die Meldung.
    * activeTab-Behandlung (Ticket 3933595861): Die Validierung in der write-Methode verglich den nullbasierten Tab-Index mit der Sheet-Anzahl
    als Ein-Element-Liste. Jeder g|+ltige "view -activetab"-Wert wurde stillschweigend auf 0 zur|+ckgesetzt, w|nhrend ausgerechnet der eine ung|+ltige Wert durchrutschte - so konnte das L||schen eines Sheets mit arrayDeleteSheet und anschlie|fendes Zur|+ckschreiben |+ber presetstyles/presetsheets eine Datei erzeugen, die Excel als besch|ndigt meldet und zu reparieren anbietet. activeTab wird jetzt auf den g|+ltigen Bereich geklemmt, und arrayDeleteSheet l|nsst den aktiven Tab nach dem L||schen auf demselben Blatt stehen.
    * presetsheets brach bei Workbooks mit Hyperlinks mit 'key "u" not known
    in dictionary' ab; Hyperlinks samt Tooltips |+berleben jetzt den Lesen/Preset/Schreiben-Roundtrip.
    * ./configure --prefix funktioniert jetzt (Ticket 1a64a34982): Das
    TEA-Ger|+st |+berschrieb das exec_prefix mit dem aus der tclConfig.sh,
    sobald --exec-prefix nicht angegeben war - das Paket landete damit
    unabh|nngig von --prefix immer im Tcl-Baum. Ein vom Benutzer angegebenes --prefix wird jetzt respektiert; ohne Optionen installiert das Paket
    weiterhin in den Baum des von configure gefundenen Tcl. Das README
    beschreibt die Installationspfade.

    Build, Tests und Dokumentation:

    * make publish l|ndt die Release-Artefakte unter ihren einfachen Namen in
    den Fossil-Unversioned-Bereich hoch (kein verirrtes uv/-Pr|nfix mehr).
    * Neue Regressionstests f|+r die activeTab-Behandlung und die Hyperlink-|Lbernahme von presetsheets (tests/xlsx-view.test); der Benchmark-Test misst jetzt mit Gleitkomma-Pr|nzision und echter 10-Prozent-Toleranz, statt an ganzzahlig abgeschnittenem Rauschen zu scheitern. Die Suite ist auf 625 Tests gewachsen (616 passed, 9 skipped,
    0 failed).
    * Die Abh|nngigkeits-Dokumentation (README, Man-Pages, Wiki) spiegelt
    wider, dass zum Lesen kein zus|ntzliches Paket mehr n||tig ist.
    --- Synchronet 3.22a-Linux NewsLink 1.2