P R O J E C T SC O N T A C T

[11]

XLSX → WORD CONVERTER

TIER B · YEAR 2026 · STATUS: LIVE · LANGUAGES: TYPESCRIPT

XLSX training catalog → Word with per-rep footers, bulk to ZIP

[FIG. 1] MISSION

An internal tool for a training company: turns an XLSX training catalog into formatted Word docs with a per-salesperson footer. Backend-less React + Vite SPA — parses the sheet with `xlsx` (index-based column mapping with header fallback), shows a searchable product list, and exports by surgically editing raw OOXML: swapping the document's `sectPr` for the footer's zero-margin `sectPr` (PizZip) so floating tables and the PNG background land pixel-perfect. Batch export zips selected products into separate `.docx` files. Launched via `.vbs`/`.ps1` so a non-technical user never touches a terminal.

[FIG. 2] ARCHITECTURE

hover a block to see its description

[FIG. 2A] XML SURGERY

oferta.docx → word/document.xml · PizZip · PATIENT OPEN

<w:body>

<w:p>…product content from the sheet…</w:p>

<w:sectPr>

<w:pgMar w:top="1440" w:bottom="1440"/>

</w:sectPr>

+ <w:sectPr>

+ <w:pgMar w:top="0" w:bottom="0"/>

+ <w:footerReference r:id="rId7"/>

+ </w:sectPr>

</w:body>

hover a diff line to see why this is surgery, not a re-render

[FIG. 3] CHALLENGES

[+][CH-01]

Faithful footer embedding — a surgical `sectPr` swap and XML merge inside the `.docx` (not a re-render) so floating tables and the PNG background land pixel-perfect.

[+][CH-02]

Irregular spreadsheet — index-based column mapping with header-keyword fallback (skip A/B, extra data X–AC only when non-empty).

[+][CH-03]

Batch without wasted I/O — template fetched once before the loop, shared by single and bulk export; selected items export even when hidden by the filter.

[FIG. 4] AI LAYER

XLSX training catalog → Word with per-rep footers, bulk to ZIP

[FIG. 5] GALLERY

SCREENSHOTS INCOMING — see SHOTS-WANTED

[FIG. 6] STACK & LINKS

REACTVITETYPESCRIPTTAILWIND V4XLSXPIZZIP (OOXML)FILE-SAVERMOTION