cat / 012
clone

a spreadsheet for the terminal: lotus 1-2-3 looks, google sheets keys and formulas, one go binary

Random edits make, rename, resize, style and remove tables and read them by column

Dami committed 5297cff
The edits found two ways a saved table wouldn't reopen: cells merged in
it after it was made, and a table another edit moved a region or a table
onto. Tables allow merged cells, and a file's tables load where they
were saved, whatever overlaps them.
commit
5297cffe80e240bb19e4274bf91161f689674e4c
parent
c45e7e8cb7f485f18d6cb54635c7a70940729842
author
Dami <dami.etoile@gmail.com>
kind
fix risk score 2.0 of 3, Jev's estimate
3 files changed, +51 -11
Ainternal/sheet/randedit_tables_test.go45++++++++++++++++++++++++++++++
Minternal/sheet/table.go7+----
Minternal/sheet/tablefile.go10+++---
A internal/sheet/randedit_tables_test.go +45 -0
@@ -0,0 +1,45 @@
1+package sheet2+3+import "fmt"4+5+// Tables among the random edits (randedit_test.go): made, renamed,6+// resized, styled and removed, and formulas reading them by column,7+// so their growth, header renames and bindings meet every other edit.8+9+func init() { randEdits = append(randEdits, (*randBook).editTable) }10+11+// randTables are the names the edits give tables.12+var randTables = []string{"Sales", "Costs"}13+14+func (r *randBook) editTable(e *edits) string {15+ s, name := r.sheet(e), randTables[e.n(len(randTables))]16+ w := s.wb17+ switch e.n(6) {18+ case 0:19+ rg := e.rect()20+ err := s.CreateTable(name, rg)21+ return fmt.Sprintf("table %s on %s!%s (%v)", name, s.name, rg, err)22+ case 1:23+ to := randTables[e.n(len(randTables))]24+ err := w.RenameTable(name, to)25+ return fmt.Sprintf("rename table %s to %s (%v)", name, to, err)26+ case 2:27+ rg := e.rect()28+ err := w.ResizeTable(name, rg)29+ return fmt.Sprintf("resize table %s to %s (%v)", name, rg, err)30+ case 3:31+ err := w.RemoveTable(name)32+ return fmt.Sprintf("remove table %s (%v)", name, err)33+ case 4:34+ banded, header := e.n(2) == 0, e.n(2) == 035+ err := w.SetTableStyle(name, banded, header)36+ return fmt.Sprintf("style table %s %v %v (%v)", name, banded, header, err)37+ }38+ a := e.addr()39+ in := []string{40+ "=SUM(" + name + "[Column1])", "=" + name + "[@Column2]*2", "=ROWS(" + name + "[#All])",41+ "=COUNTA(" + name + ")", "=SUM(" + name + "[[#Headers],[#Data],[Column1]:[Column2]])",42+ }[e.n(5)]43+ err := s.Set(a, in)44+ return fmt.Sprintf("%s!%s = %q (%v)", s.name, a, in, err)45+}
M internal/sheet/table.go +1 -6
M internal/sheet/tablefile.go +5 -5