Sheets

Add support for Spreadsheets to store data.

Options See on deno.land

extensions string[]

Extensions processed by this plugin

Default:
[ ".xlsx", ".numbers", ".csv" ]
sheets first auto

Return the first sheet only or all sheets if the document have more

Default:
"auto"
options object

Options passed to Sheetjs

type base64 binary buffer file array string

Input data encoding

codepage number

Default codepage for legacy files

This requires encoding support to be loaded. It is automatically loaded in xlsx.full.min.js and in CommonJS / Extendscript, but an extra step is required in React / Angular / Webpack ESM deployments.

Check the relevant guide https://docs.sheetjs.com/docs/getting-started/

cellFormula boolean

Save formulae to the .f field

Default:
true
cellHTML boolean

Parse rich text and save HTML to the .h field

Default:
true
cellNF boolean

Save number format string to the .z field

Default:
false
cellText boolean

Generate formatted text to the .w field

Default:
true
dateNF string

Override default date format (code 14)

FS string

Field Separator ("Delimiter" override)

sheetRows number

If >0, read the first sheetRows rows

Default:
0
bookDeps boolean

If true, parse calculation chains

Default:
false
bookFiles boolean

If true, add raw files to book object

Default:
false
bookProps boolean

If true, only parse enough to get book metadata

Default:
false
bookSheets boolean

If true, only parse enough to get the sheet names

Default:
false
sheets number string object

If specified, only parse the specified sheets or sheet names

raw boolean

If true, plaintext parsing will not parse values

nodim boolean

If true, ignore "dimensions" records and guess range using every cell

xlfn boolean

If true, preserve _xlfn. prefixes in formula function names

dense boolean
PRN boolean

Description

This plugin use SheetJS to read any spreadsheet document as _data files, so you can use this data to render your pages.

Installation

Import this plugin in your _config.ts file to use it:

import lume from "lume/mod.ts";
import sheets from "lume/plugins/sheets.ts";

const site = lume();

site.use(sheets());

export default site;

Formats

By default, it loads the .xlsx, .numbers and .csv files. You can use any extension supported by SheetJS. See the file formats documentation for more info.

import lume from "lume/mod.ts";
import sheets from "lume/plugins/sheets.ts";

const site = lume();

site.use(sheets({
  extensions: [".ods", "rtf", "xls"],
}));

export default site;

Sheet mode

The plugin can work in two sheet modes: first and auto.

First

In the first sheet mode, only the first sheet found in the document is returned, even if it contains more. For example a file stored in _data/people.xlsx containing two sheets, only the first one is returned:

<table>
  <tr>
    {% for key, column in people[0] %}
      <th>{{ key }}</th>
    {% endfor %}
  </tr>

  {% for row in people %}
    <tr>
      {% for key, column in row %}
        <td>{{ column }}</td>
      {% endfor %}
    </tr>
  {% endfor %}
</table>

Auto

If the sheets value is set to auto, it returns all sheets found in the document and you have to use the sheet name to access to its content.

For example, if the file _data/people.xlsx contains the sheets "Women" and "Men", you can access to the data in this way:

<h1>Women</h1>
<ul>
  {% for person in people["Women"] %}
    <li>
      {{ person.name }} - {{ person.surname }}
    </li>
  {% endfor %}
</ul>

<h1>Men</h1>
<ul>
  {% for person in people["Men"] %}
    <li>
      {{ person.name }} - {{ person.surname }}
    </li>
  {% endfor %}
</ul>

If the spreadsheet contain only one sheet, you don't have to access to the data by the name. In this case it works exactly as the "first" mode.

The default mode is auto, to change it to first:

import lume from "lume/mod.ts";
import sheets from "lume/plugins/sheets.ts";

const site = lume();

site.use(sheets({
  sheets: "first", // Return the first sheet found in each document
}));

export default site;