untitled

Export: Markdown, Word or OpenDocument

Import Markdown or CSV

Headings become h1–h4 rows, list items become indented rows, > **notes:** … blockquotes and <!-- notes: … --> comments fill side columns of the row above, other comments become x rows. Front matter title, author and description fill empty settings. A CSV or TSV table imports one row per line: the text column (or the longest one) becomes the text, kind and indent columns are honoured, the rest become side columns.

Settings

This workbook

Columns

Any column name works; the app treats a column specially by the role you give it here. Status values show as coloured chips on cards and tint Grid cells. Defaults are column=value pairs filled into rows you add. Columns starting with a dot are SheetWriter's own.

Counts and targets

Count words and characters in

A number in the target column on a heading row is the target for that section, shown on the card and in the contents pane; the workbook target shows in the status bar.

Grid and Excel

Stored in the protected .sheetwriter sheet inside the workbook, with created/modified dates and links to this editor. Extra rows you add to that sheet are kept.

Editor (this browser)

The display state (view, sheet, row, table of contents, visible columns, counts) is saved with the workbook too, from the Columns ▾ and Contents buttons.

File changed on disk

Overwrite if the disk changes do not matter. Save as a copy to keep both, then compare in Excel. Cancel to look first.

Snapshots and compare

A snapshot is a named copy of the whole workbook kept in this browser (the autosave history under Recent keeps unnamed ones). Compare lists the rows added, removed or changed since a snapshot, since the file was last saved, or against another workbook.

Compare

Click an added or changed row to go to it.

Open from a link

Name

SheetWriter

A text editor whose document is an Excel workbook. One argument per row, extra columns for notes, sources, examples. Each sheet is a chapter. Columns whose names start with a dot belong to SheetWriter: .kind marks headings and paragraphs, .indent nests rows, .no holds the numbering, .words, .chars, .updated and .author are maintained on save. Every other column is yours to name. Cells are Markdown.

Kinds and structure

h1 … h4Headings. h1 is always one number (1, 2, 3), h2 two (2.1), h3 three (2.1.1). Numbering continues from sheet to sheet, so a chapter per sheet that starts with an h1 row is numbered 2, 3, …; Settings can make each sheet restart at 1 instead. Type # to #### and a space at the start of a row to set the kind.
pParagraph. Numbered one level below its heading, plus its indent.
indentTab / Shift+Tab (Draft view), Ctrl+] / Ctrl+[, or type three spaces at the start of a row (changeable in Settings). An indented row under 2.1 becomes 2.1.1.
sSentence that continues the previous paragraph on export (still its own row and number).
xExcluded from export (a parked argument, a note to self).

Keys in a row (Draft and Grid)

EnterNew row below (at the end of the text), new row above (at the start), or split the row (in the middle). Shift+Enter is a line break. Swap the two in Settings.
BackspaceOn an empty row: delete it. At the start of an indented row: outdent. Empty rows are also removed when you leave them.
Ctrl+JMerge with the next row
Alt+↑ / Alt+↓Move the row with its sub-rows past the previous / next sibling (or drag the ⋮⋮ handle; drop on a tab to move to another chapter)
Alt+Shift+← / →Promote / demote: h1 ← h2 ← h3 ← h4 ← p ← s
Ctrl+EnterCycle kind (Shift reverses); or click the kind badge
Ctrl+.Collapse / expand the rows under a heading, paragraph or indented row
Ctrl+B / Ctrl+I / Ctrl+KBold, italic, link around the selected text (Markdown markers; press again to remove)
Ctrl+DDuplicate row
Ctrl+Shift+KDelete row
Ctrl+Shift+MMove row (with sub-rows) to another chapter
↑ / ↓At the first/last line of a cell: move to the previous/next row. Settings → ↑ / ↓ while editing can make them always move a row instead (saved with the workbook). In Grid the cursor stays in its column.
← / →, TabGrid: at the start/end of a cell's text, ← / → move to the previous/next cell; Tab and Shift+Tab always do. Both wrap to the next or previous row.
Esc (Grid)Leave the cell for the cell cursor (the highlighted cell). Arrow keys, Tab, Home / End, Ctrl+Home / End and PageUp / PageDown move it; Enter or F2 edits the cell, and typing starts editing at the end of its text. Esc with nothing being edited brings the cursor back.

Selecting rows

Click number or ⋮⋮Select the row. Shift+click selects a range, Ctrl+click adds or removes a row. A collapsed heading brings its hidden rows.
Ctrl+Shift+↑ / ↓Extend the selection from the row being edited.
Ctrl+ASelect all rows (when no text field is focused).
Ctrl+C / X / V / D, DeleteCopy, cut, paste, duplicate, delete the selected rows (when no text field is focused; the bar at the bottom has the same buttons). Pasting keeps every column, also into other sheets, and adds missing columns.
Click elsewhere, EscClear the selection.
Drag a selected rowMove all selected rows together (drag the ⋮⋮ handle or the card itself; in Grid, the row), above or below another row, or onto another sheet's tab. Rows selected in a different order or with gaps arrive in sheet order, as one group.

Global

Ctrl+S / Ctrl+Shift+SSave / Save as
Ctrl+OOpen
Ctrl+Z / Ctrl+YUndo / redo
Ctrl+EExport dialog: Markdown (.md), Word (.docx) or OpenDocument text (.odt), with the same options; a side column as blockquotes, comments or footnotes; presets saved in the workbook
Ctrl+F / Ctrl+HFind / find and replace across the workbook; F3 and Shift+F3 step through matches
Ctrl+PageUp / PageDownPrevious / next sheet

Markdown import

The Import button, or drop a .md or .csv file on the window. A CSV or TSV table gives one row per line, with its text column (or the longest column) as the text and the other columns as side columns. For Markdown: one paragraph per row by default; files written one sentence per line are detected and imported line by line; a sentence mode splits paragraphs into p and s rows. Lists become indented rows, and the side-column blockquotes and comments that Export writes are read back into their columns, so export and import round-trip. Import into a new sheet, one sheet per h1, or the current sheet. Several files at once become several sheets.

Table of contents

The Contents button opens a pane listing the headings of this sheet or of all sheets, with numbers and section word counts (or characters against a character target). Click a heading to jump to it in Draft, Grid or Read view; collapsed sections open on the way. The heading you are working under is highlighted. The pane is also an outliner: drag a heading to move its whole section above or below another heading, or onto a sheet name to move it to that sheet; the ◂ ▸ buttons that appear on hover promote or demote a section together with its sub-headings, ⤴ moves it to a new sheet; on a focused entry, Alt+↑/↓ moves the section past a sibling and Alt+Shift+←/→ promotes or demotes it. Drag the pane's right edge to make it wider or narrower (remembered in this browser); double-click the edge to reset.

Status, targets, filter

Settings → Columns chooses which of your columns the app treats specially, whatever their names: the main text column (★) and a status column (●) whose values show as coloured chips under each card and tint the Grid cell. Settings → Counts and targets chooses the columns whose words and characters are counted, a target column (◎) whose number on a heading row sets a target for that section, shown against the section count on the card and in the contents pane, and a target for the whole workbook, shown in the status bar. Targets count words or characters, as chosen there. The Filter button (Draft and Grid) hides rows that do not match: plain text, or column:value such as status:todo, kind:h2 or no:2.1. Pasting rich text from Word or a browser into the import dialog converts it to Markdown.

Grid, columns and tabs

In Draft, the ◨ Side button shows or hides the side columns beside the text; Columns ▾ chooses which. Columns are shared by all chapter sheets: adding, renaming, deleting or reordering a column applies everywhere, and deleting warns if any sheet holds data in it. Click a column name to rename it, drag a column header to reorder, drag its right edge to resize. The – button hides a column in Grid view; the Columns ▾ button chooses which columns the Grid and Draft views show. Rows hide in Grid by collapsing (▾ in the number cell, Collapse all) or by typing in the filter box above the table. Double-click a sheet tab to rename it. Drag rows by the ⋮⋮ handle, drag tabs to reorder chapters. Click the title in the toolbar to change it.

Files

Saving checks whether the file changed on disk since it was opened (edited in Excel, say) and asks before overwriting. An autosave snapshot is kept in the browser every 5 minutes (Recent ▾ → Recover an autosave…), and Settings can add an autosave copy written to a second workbook, such as name_AUTOSAVE.xlsx, at an interval of your choice. Excel hyperlinks are read as Markdown links. In Read view, click any paragraph or heading to edit it.

Recent ▾ → Snapshots and compare… keeps named copies of the workbook in this browser and compares the editor with a snapshot, with the saved file, or with another workbook: rows added, removed or changed, with word-level differences, grouped by sheet. Click a row in the list to go to it.

Editing in Excel: the .sheetwriter sheet starts with a short description of the workbook and instructions, above its settings table, on what is safe (text, rows, sorting, .kind, .indent, your own columns), what is kept (cell colours, borders, comments and fonts follow the row through a hidden .id column), what is lost on the next save (formulas, number formats, row heights on chapter sheets) and what breaks the structure (renaming dotted columns or the text column, merged cells). Chapter sheets have only their header row protected; everything else is editable, and Review → Unprotect Sheet lifts it.

Formats: the workbook is saved as .xlsx or, when the file name ends in .ods, as an OpenDocument spreadsheet for LibreOffice, with the same sheets, settings and contents. Both open. Formatting of data sheets is only carried through for .xlsx, and .ods files have no frozen panes.

Links from notes apps such as Obsidian: Recent ▾ → Copy link to this workbook (or a Markdown link, or one to the row you are in) gives a web address that opens this workbook in SheetWriter, at that row if chosen. A web page cannot open a file by its path, so the link finds the file in this browser's Recent list, by an id kept in .sheetwriter (so renaming the file is fine) or else by name. It works in Edge and Chrome, in the browser where the file was opened before; after a browser restart one click gives SheetWriter access to the file again. Elsewhere the link asks you to open the file once.

In Edge and Chrome the app opens and saves the .xlsx in place and keeps a Recent list. In Firefox and Safari, Open uses a file picker and Save downloads a copy. Unsaved work is also kept in the browser and offered back on the next start. Sheets without a main text column are data sheets: shown read-only, written back unchanged. A workbook edited or sorted in Excel is put back in no order on load; rows without a number go last. A plain spreadsheet without a text column is imported using its longest text column.