2 Quick Tutorial

If you want to get started quickly and think that you know what to expect from a simple spreadsheet, this chapter may be all that you need.

First, visit a new file with the .ses extension. Emacs presents you with an empty spreadsheet containing a single cell.

Begin by inserting a headline: "Income"RET. The double quotes indicate that this is a text cell. (Notice that Emacs automatically inserts the closing quotation mark.)

To insert your first income value, you must first resize the spreadsheet. Press TAB to add a new cell and navigate back up to it. Enter a number, such as ‘2.23’. Then proceed to add a few more income entries, e.g.:

A
 Income
   2.23
   0.02
  15.76
  -4.00

To add up the values, enter a Lisp expression:

(+ A2 A3 A4 A5)

Perhaps you want to add a cell to the right of cell A4 to explain why you have a negative entry. Pressing TAB in that cell adds an entire new column ‘B’, where you can add such a note.

The column is fairly narrow by default, but pressing w allows you to resize it as needed. Make it 20 characters wide. You can now add descriptive legends for all the entries, e.g.:

A       B
 Income
   2.23       Consulting fee
   0.02     Informed opinion
  15.76       Lemonade stand
     -4          Loan to Joe
  14.01                Total

By default, the labels in column B are right-justified. To change that, you can enter a printer function for the whole column, using e.g., M-p ("%s"). You can override a column’s printer function in any individual cell using p.

If Joe pays back his loan, you might blank that entry; e.g., by positioning the cursor in cell A5 and pressing C-d twice. If you do that, the total cell will display ‘######’. That is because the regular + operator does not handle a range that contains some empty cells. Instead of emptying the cell, you could enter a literal ‘0’, or delete the entire row using C-k. An alternative is to use the special function ses+ instead of the regular +:

(ses+ A2 A3 A4 A5)

To make a formula robust against changes in the spreadsheet geometry, you can use the ses-range macro to refer to a range of cells by the end-points, e.g.:

(apply 'ses+ (ses-range A2 A5))

(The apply is necessary because ses-range produces a list of values. This allows for more complex possibilities.)

Alternatively you can use the ! modifier of ses-range to remove blank cells from the returned list, which allows to use + instead of ses+:

(apply '+ (ses-range A2 A5 !))