Inchgrove spreadsheet guide
Adding and updating records from CSV files: what each column takes, how rows link to each other, and the mistakes that are easy to make.
The spreadsheet tools are in Settings → Backup & Sync → Edit in a Spreadsheet. The quickest start is an export of what you already have (Export trees for editing and the like): it has every column filled in the way the import reads it. Blank templates and the values sheet are under Or start from a blank template. When your files are ready, use Choose files to import. You can choose several files at once.
The seven files
Each file holds one kind of record. The app tells them apart by a column only that kind has, so the file name and the order of the columns don't matter.
| File | One row is | Recognised by the column |
|---|---|---|
| Species | a species | Hardiness Zone |
| Trees | a tree | Growing In |
| Pots | a pot, or a set of identical pots | Tree Key and Material together |
| Jobs | a job | Due Date |
| Diary | a diary entry | Diary Entry |
| Measurements | a tree's trunk and height on one day | Trunk Diameter (mm) or Height (cm) |
| Photos | a photo or video | File |
-
You can delete the columns you don't need, but keep the one that names the file's kind, even
if every cell in it is blank. A pots file without its
Tree Keycolumn isn't recognised. - Keep the column names exactly as they are, in English, whatever language the app is in. A file whose header row has been renamed or translated is listed as not recognised.
- Files chosen together are one import, applied in the order species, trees, pots, jobs, measurements, diary, photos. So a pots file can put a tree from the trees file into a pot, both new in the same import.
- The values sheet is reference only. It is never imported.
Add or update: the Key column
Every file except species has a Key column. It decides what a row does.
- The id of a record you have, as an export writes it: the row updates that record.
- Blank: the row adds a new record.
-
Any other text: the row adds a new record, and the text becomes a name the
other files in the same import can use to point at it. Give a new tree the Key
maple-1, and a pot row can hold it with Tree Keymaple-1. The name lasts for that one import; afterwards the record has an id of its own, which the next export shows.
Species rows have no Key. A species is matched by its Genus,
Species and Cultivar together, ignoring capitals and surrounding
spaces. To rename a species, put its id in Species ID and the new names beside
it.
Blank cells
- On an update row, a blank cell means “leave this as it is”, never “clear it”. That is why unneeded columns can be deleted. To clear a value, edit the record in the app.
- On a new row, a blank cell leaves the field unrecorded, or at its usual default.
- Deleting a row from the file doesn't delete the record. Records are deleted in the app.
Linking records
| Column | In | Names |
|---|---|---|
Tree Key |
pots, jobs, diary, measurements, photos | a tree: its id from an export, or the Key of a row in a trees file in the same import |
Pot Key |
photos | a pot: its id, or the Key of a row in a pots file in the same import |
Species ID |
species, photos | a species you already have, by its id in the species export, which lists your own species and the built-in ones your trees use |
-
Trees go into pots from the pots file. The trees file has no pot column. A
pot row's Tree Key lists the trees in it, separated by
;. A single pot holds one tree; a set (Quantity above 1) holds as many as it has pots. - Listing a tree adds it to the pot. A tree already in the pot stays there, and a blank Tree Key leaves the pot's trees alone. Taking a tree out of a pot is done in the app.
- Putting a tree into a single pot that holds another tree turns that tree out of it, as repotting in the app does. The preview says when an import does this.
- A job or diary entry with a blank Tree Key belongs to the whole collection. A measurement always needs one.
- A photo names at most one owner: a tree, a pot or a species. With all three blank, it belongs to the collection.
- A job, diary entry, measurement or photo stays with the owner it was added to. On an update row, a job's Tree Key is ignored, and a diary entry, measurement or photo naming another owner is reported as a problem.
Formats
| Kind of cell | Write it as |
|---|---|
| Date |
YYYY-MM-DD, as in 2024-08-12. It must be a real day:
2025-02-30 is refused. See dates below.
|
| Date and time |
YYYY-MM-DD HH:MM on the 24-hour clock, as in 2024-08-12 15:04,
or the date alone. No seconds.
|
| Number |
Digits, with a decimal point or a decimal comma (24.5 or
24,5). No thousands separator, and no unit: the unit is in the column name.
|
| Money |
A bare amount of 0 or more, with at most two decimal places: 45,
45.50. No currency symbol and no thousands separator, so
1,500 is refused rather than read as 1.5. Amounts are in the collection's
currency.
|
| Whole number | Tag and Quantity: 1 or more, no decimals. |
| Yes or no | Yes or No, in any capitals. |
| List | Items separated by ;, as in Japanese maple; Red maple. |
| Text | Anything, including line breaks in the longer fields. Spaces at either end are dropped. |
- Save the file as CSV with UTF-8 encoding. In Excel, choose CSV UTF-8 when saving; another encoding garbles accented names.
- Commas, semicolons and tabs all work as separators. The import detects which one the file uses, so a file saved by a spreadsheet app in any language reads correctly.
Choice values
Most choice columns take any text. These are Style, Size,
Stage, Source, Material, Colour,
Texture, Shape, Condition, General Type,
the archive reasons and a photo's Tag. A value the app doesn't have is added as a
new one, exactly as typing it into the app's own picker would. The values sheet lists the
app's spellings. Use them, or “Gray” and “Grey” become two colours.
Write the English values even when the app shows another language. The app translates its own values for display, but it can't tell a translated value from a new one: “Braun” in a colour column is stored as a colour called Braun.
A few columns take only a fixed set of values, and anything else is reported as a problem:
Growing In (trees)
PotGround
Container Volume (L) (trees)
The nursery container a tree is in, for a pot not catalogued as a record of its own. These are the sizes containers are sold in, in litres:
<11234571015202530405060>60
Winter Shelter (trees)
Blank on a new tree means it winters in the open.
Under coverFrost-free
Type (jobs)
What kind of job it is: it picks the job's icon and which recipe the job can record. Blank on a new job leaves the app to tell from the job's text, as it does for jobs added before types.
repotfertiliseprunewirewoodworkinspectpestControlmaintenancewinterProtectother
Leaf Fall (species)
DeciduousEvergreenSemi-evergreen
Hardiness Zone (species)
The USDA zone, a whole number from 1 to 13: the coldest zone the
species takes.
Columns, file by file
Species
Only needed for what a tree row can't say: common names, hardiness, leaf fall, family, general type. A tree row names its species itself.
| Column | Takes | Notes |
|---|---|---|
Species ID |
a species' id | Blank on most rows. Fill it in only to rename the species it names. |
Genus |
text | Required. |
Species |
text | |
Cultivar |
text | |
Family |
text | |
Common Names |
list | The English names. They replace the English list; names in other languages stay. |
General Type |
choice | See the values sheet. |
Leaf Fall |
fixed choice | Listed above. |
Hardiness Zone |
1 to 13 | |
Flagged |
yes or no |
A row that matches a built-in species changes your copy of it; the catalogue's own entry is untouched. A row that only restates a species changes nothing.
Trees
| Column | Takes | Notes |
|---|---|---|
Key |
id or text | The Key column. |
Tag |
whole number | The tree's number. No two trees share one. |
Name |
text | |
Genus |
text | Required for a new tree. With Species and Cultivar it picks the tree's species; a combination the app doesn't have is added as a species of your own. Blank on an update row keeps the species. |
Species |
text | |
Cultivar |
text | |
Style |
choice | |
Size |
choice | |
Stage |
choice | |
Acquired |
date | |
Growing In |
Pot or Ground |
Blank on a new tree means a pot. |
Container Volume (L) |
fixed choice | Listed above. |
Description |
text | Up to 4000 characters. |
Development History |
text | Up to 4000 characters. |
Flagged |
yes or no | |
Archived Date |
date | Archiving. |
Archive Reason |
choice | |
Archive Note |
text | Up to 1000 characters. |
Purchase Price |
money | |
Value |
money | |
Valued On |
date | When the value was put on it. |
Winter Shelter |
fixed choice | Listed above. |
Source |
choice | Where the tree came from, such as Nursery stock. |
Pots
| Column | Takes | Notes |
|---|---|---|
Key |
id or text | The Key column. |
Tree Key |
list | The trees in the pot. Linking records. |
Tag |
whole number | No two pots share one. |
Name |
text | |
Material |
choice | Required for a new pot. |
Colour |
choice | |
Texture |
choice | |
Shape |
choice | |
Length (cm) |
number | Up to 200. |
Width (cm) |
number | Up to 200, and no more than the length. |
Depth (cm) |
number | Up to 200. |
Size |
choice | |
Glazed |
yes or no | |
Maker |
text | |
Condition |
choice | |
Acquired |
date | |
Quantity |
whole number | How many identical pots the row stands for, up to 999. Blank on a new pot means 1. It can't go below the number of trees in the set. |
Notes |
text | Up to 4000 characters. |
Flagged |
yes or no | |
Archived Date |
date | Archiving. |
Archive Reason |
choice | |
Archive Note |
text | Up to 1000 characters. |
Purchase Price (per pot) |
money | For one pot: a set's total is this times Quantity. |
Value (per pot) |
money | For one pot, as the price. |
Valued On |
date |
Jobs
| Column | Takes | Notes |
|---|---|---|
Key |
id or text | The Key column. |
Tree Key |
a tree | Blank for a job for the whole collection. |
Text |
text | Required, on update rows too. |
Due Date |
date | Required, on update rows too. |
Completed Date |
date | Marks the job done on that day. A job already done stays done; reopening one is done in the app. |
Type |
fixed choice | Listed above. |
Repeating jobs and the recipes linked to a job (soil mix, fertiliser, pest treatment) have no columns. Set them in the app.
Diary
| Column | Takes | Notes |
|---|---|---|
Key |
id or text | The Key column. |
Tree Key |
a tree | Blank for the collection's own diary. |
Date |
date, or date and time | Required, and not after today. A date alone is entered at midday. |
Diary Entry |
text | Required. Up to 1000 characters. |
- An update row changes the entry's text. Its tree and date stay as they were.
- A new row restating an entry already held (the same tree, text and day, or the same minute when the row gives a time) adds nothing, so importing a file twice is harmless. Two rows with the same text on one day need times to be kept as two entries.
- Entries dated by day alone keep their order in the file.
Measurements
| Column | Takes | Notes |
|---|---|---|
Key |
id or text | The Key column. |
Tree Key |
a tree | Required. |
Date |
date | Required, and not after today. |
Trunk Diameter (mm) |
number | 1 to 1000, rounded to whole millimetres. |
Height (cm) |
number | 1 to 300. |
- A row needs a diameter, a height or both.
- A tree has one measurement per day. A new row for a day already measured fills in a figure the day lacks and changes nothing when the figures match. A different figure is reported as a problem.
- To correct a figure, use the measurement's Key from an export: an update row replaces the figures it gives. The tree and date can't change.
Photos
| Column | Takes | Notes |
|---|---|---|
Key |
id or text | The Key column. |
Tree Key |
a tree | At most one of the three. All blank: the collection. |
Pot Key |
a pot | |
Species ID |
a species | |
File |
a file name | Required. The name alone, without a folder, as in IMG_0412.jpg. |
Date Taken |
date, or date and time | Not after today. Blank means the time of the import. |
Caption |
text | One line, up to 200 characters. |
Tag |
choice | The view, such as Front or Nebari. |
-
Where the files come from. After reading the rows, the app asks for the
folder that holds the files. Each name in
Filemust be in that folder. A name differing only in capitals is accepted. -
An exported photos file names each file as a
.zipbackup stores it. Unzip a backup and choose that folder. The folder that Export Photos… writes, under Export for Other Apps, won't do: it renames photos for reading. - An update row changes only the caption and the tag. A photo's owner, file and date stay as they were.
- A new row naming a file the owner already has adds nothing.
- The app checks there is room for the new files before writing anything. A file too large for the app is skipped and named when the import finishes.
Archiving
A date in Archived Date on a tree or pot that isn't archived archives it, with
the same effects as in the app:
- Archiving a tree cancels its open jobs and takes it out of its pot.
- Archiving a pot takes the trees out of it, unless the same import archives them too: then they leave together.
The preview lists these changes, which reach records the file doesn't mention. A blank Archived Date doesn't bring a record back; restoring is done in the app.
Common mistakes
Dates rewritten by the spreadsheet app
The import's most common problem. Excel and other spreadsheet apps read
2024-08-12 as a date, show it in your computer's short format, and save it that
way: 12/08/2024, 08/12/2024, 12.08.2024 or
2024/08/12. The import refuses all of them, since 07/08/2024 could
be either of two days. When it finds one, the list of problems says so. To fix it:
-
In Excel, select the date columns, open Format Cells,
choose Custom and enter
yyyy-mm-dd. Excel spells the codes in its own language, for exampleJJJJ-MM-TTin German oraaaa-mm-jjin French. Then save as CSV again. - Before typing new dates, format the columns as Text, so what you type is kept as typed.
- When opening a CSV, LibreOffice's import dialog lets you set the date columns' type to Text. Google Sheets' File → Import has an option to stop converting text to dates.
Excel can do the same to money. A column formatted as currency saves £45.00,
which the import refuses. Keep those columns as plain numbers.
A misspelt species adds a new one
Acer palmatun isn't an error: no species has that name, so the import adds one.
The preview asks about a new species whose name is a letter or two away from one the app
already has. It can't catch every typo, so check the new species it counts too.
A new spelling adds a new value
In the choice columns, “Teracotta” is stored as a material of its own, beside “Terracotta”. Copy values from the values sheet or an export.
The apostrophe at the start of some cells
An export puts ' in front of text starting with =, +,
- or @. Without it, a spreadsheet app would run a name such as
=SUM(…) as a formula. Leave it in place: the import takes it off again.
Unchanged rows
Species, job, diary, measurement and photo rows that restate what the app holds change nothing, and the preview counts them as already up to date. Tree and pot rows with a Key are always counted as updated, changed or not: delete the rows you didn't edit to see only the ones you did.