--- title: Eleventy pagination_prev: demos/net/index pagination_next: demos/mobile/index --- import current from '/version.js'; import CodeBlock from '@theme/CodeBlock'; Eleventy is a static site generator. The [NodeJS module](/docs/getting-started/installation/nodejs) can be loaded in `.eleventy.js` and used in custom data file format parsers. The following diagram depicts the workbook waltz: ```mermaid flowchart LR file[(workbook\nfile)] subgraph SheetJS operations buffer(NodeJS\nBuffer) aoo(array of\nobjects) end html{{HTML\nTABLE}} file --> |.eleventy.js\ncustom parser| buffer buffer --> |.eleventy.js\ncustom parser| aoo aoo --> |index.njk\ntemplate| html ``` ## Integration Details ### Data File Parser Custom data file parsers must be registered in `.eleventy.js` `addDataExtension` accepts a list of file extensions and a parser object. The parser object must include the options `read: true` and `encoding: null` . Eleventy will read files and pass raw `Buffer` objects to the parser callback. The `parser` callback can parse the data with `XLSX.read`. In this demo, the parser will generate an array of row objects using `XLSX.utils.sheet_to_json`: ```js title=".eleventy.js" const XLSX = require("xlsx"); /* list of file extensions */ const exts = [ "numbers", "xlsx", "xlsb", "xls" ].join(", "); module.exports = (eleventyConfig) => { eleventyConfig.addDataExtension(exts, { /* read file and pass raw Buffer object to parser */ // highlight-next-line encoding: null, read: true, /* parser callback */ parser: (contents) => { /* contents is the data stored as a Buffer */ // highlight-next-line const wb = XLSX.read(contents); /* generate array of row objects from first worksheet */ return XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]); } }); }; ``` ### Usage Spreadsheet files added in the `_data` subdirectory are accessible from template files using the name stem. For example, [`pres.numbers`](https://sheetjs.com/pres.numbers) can be accessed using the variable `pres` in a template: ```liquid title="index.njk"
Name | Index | {% for row in pres %}
---|---|
{{ row.Name }} | {{ row.Index }} |