XLSX, ODS et CSV dans un paquet npm sans dépendance
hucre lit et écrit des classeurs XLSX et ODS, du CSV, du JSON, du NDJSON et du XML, et lit aussi les formats binaires XLS et XLSB. Le paquet est écrit en TypeScript sans aucune dépendance, et son cœur n'appelle ni fs, ni crypto, ni Buffer. Le même code produit ou lit un fichier Excel sous Node 24 et plus, Bun, dans un navigateur, un Cloudflare Worker ou une Vercel Edge Function.
Écriture en flux et retouche des classeurs à l'octet près
- Chaque format a son point d'entrée (
hucre/xlsx,hucre/csv,hucre/ods,hucre/json,hucre/xml). Le README mesure 3,7 Ko gzippés pour le CSV seul et 129 Ko pour tout le paquet, et la CI échoue dès qu'une de ces tailles dépasse son budget. writeXlsxStreamtire ses lignes d'un itérable, un curseur de base de données par exemple, et renvoie unReadableStream. Sa mémoire suit le nombre de styles distincts, pas celui des lignes : le banc d'essai du dépôt plafonne à 67 Mo de tas pour un million de lignes.openXlsxetsaveXlsxrecopient à l'identique chaque partie que hucre ne régénère pas, si bien que graphiques, macros VBA et thèmes survivent à une retouche. Le cheminreadXlsxpuiswriteXlsxreconstruit au contraire le classeur et perd ce que son modèle ne décrit pas, macros comprises.- Les classeurs protégés par mot de passe (chiffrement Agile d'Excel 2010 et suivants) se lisent et s'écrivent avec WebCrypto.
validateWithSchemaconvertit les types, appliquerequired,pattern,min,max,enumou des validateurs maison, et range à part les erreurs, chacune avec sa ligne, son champ et sa valeur.- La ligne de commande
npx hucreconvertit, inspecte et valide un fichier, y compris depuis l'entrée standard.
Formules laissées à Excel, XLS et XLSB en lecture seule
hucre ne calcule aucune formule. Il écrit la formule et, si on la lui fournit, sa valeur en cache, mais chaque classeur produit demande à Excel de tout recalculer à l'ouverture : une valeur passée dans formulaResult ne sert qu'aux autres outils. La feuille de route range le moteur de formules parmi ce qui n'est pas encore implémenté.
XLS et XLSB se lisent sans s'écrire, et seules leurs valeurs passent. Les lecteurs rendent noms de feuilles, valeurs, dates et cellules fusionnées. Une conversion en XLSX fige donc chaque formule en valeur, perd styles et dimensions et rend visibles les feuilles masquées (docs/PARITY.md du dépôt).
L'ODS ne porte que six propriétés de style : gras, italique, taille et couleur de police, couleur de fond, format numérique. Un XLSX converti en ODS perd sans avertissement ses bordures, ses largeurs de colonnes, ses volets figés et ses validations.
La lecture en flux reste gourmande quand les chaînes varient. streamXlsxRows charge d'abord toute la table des chaînes partagées. Sur 100 000 lignes de 12 colonnes, le README relève 556 Mo avec 400 000 chaînes distinctes contre 90 Mo avec 10 : un export de noms ou de références produits tombe dans le premier cas.
Le projet se compare lui-même à SheetJS et à ExcelJS. Son README rappelle que SheetJS a quitté npm et réserve le style à son offre payante, et qu'ExcelJS tire neuf dépendances et ne livre que du CommonJS.
La version 1.3.0 est sortie le 26 octobre 2026. La 1.0.0 du 4 août a fait de l'API publique un engagement de stabilité, dont seul le point d'entrée hucre/ooxml est exclu. Le dépôt compte treize versions, la première (0.1.0) en mars 2026. Le README désigne le dépôt GitHub et le paquet npm hucre comme seules sources officielles : le site hucre.dev n'a aucun lien avec le projet.
