How to Get a Spreadsheet of Tasks into Reminders.app
Tags:
Bottom Line: Here’s how to batch import tasks into Reminders.app on your Mac.
I don’t really use Reminders.app as a tasklist, but I do use it for other things. Its integration with iOS apps like Drafts and OmniFocus make it actually fairly useful. For example, I use it to get Siri to add tasks to OmniFocus.
Because Reminders.app uses an iCalendar format for syncing, a commenter recently asked me if there is a way to use my icsConverter with Reminders. An interesting question!
Right now, there isn’t a way to use it directly. However, with a few (okay, several) extra steps, it seems like it wouldn’t be too difficult to batch convert a large spreadsheet of tasks and import into Reminders.app.
Before I get started, I’ll say that AppleScript may be an easier way to get this done, and there are almost certainly ways to abbreviate the process for users familiar with tools like sed
, perl
, etc. The process as I’ve outlined below is quite a bit of manual work, and it could be simplified and automated considerably. However, it’s a task that I will probably never need to do, and most folks will need to do only on rare occasion. The post below will be most useful to folks that need to import hundreds (or more) of tasks as a time. If you only need to import a dozen or so tasks, or if you need to do so any more frequently than once a month, you should probably look for a better way.
If you’re still with me, here goes:
The first step would be to get the spreadsheet into an acceptable format. Here is my new template. No, you can’t edit mine, you’ll have to File -> Make a copy
, or File -> Download as
and open in your spreadsheet editor of choice.
As with converting a spreadsheet to a calendar, preparing the spreadsheet correctly is the most important part. Triple check that of your headers are exactly right, and triple check that your dates and times are formatted correctly. Do not delete any of the columns from the template, even if the values are optional. For importing reminders, here are the fields:
Subject
: Required. The task name.Start Date
andStart Time
: Required, but don’t matter as far as I know. I left these in in case start dates are supported in a future version.Description
: Optional. A note to go along with the task.Location
: Optional. Does not work (yet) and will be deleted from the file. Leave blank or fill with junk.Private
: Optional. Just leave asTRUE
.
For tasks with “reminder times” (the closest equivalent of a due date):
- Set
All Day Event
toFALSE
End Date
andEnd Time
are required and will be the reminder time.
For tasks without “reminder times”:
- Set
All Day Event
toTRUE
- Leave
End Date
andEnd Time
blank
When you’re done editing, download as
or export to .csv
and run it through icsConverterWebapp. If you’re confused or have problems, please read through my icsConverter instructional post before contacting me for help. If you’ve been through this post a time or two and still can’t figure it out, I’m happy to help you as time permits.
Next, after you’ve downloaded the converted .ics
file, you’ll need to open it up in a text editor that supports regex find and replace. I highly recommend TextWrangler, and my examples will be regexes in TextWrangler format.
Once you have converted.ics
open in TextWrangler, open the Search -> Find
box from the menu. Run the following search and replace commands with the grep
option checked.
- Find:
(?<=^BEGIN:|^END:)VEVENT$
Replace:VTODO
- Find:
^DTSTART;VALUE=DATE(-TIME)?:([0-9T]+)$
Replace:CREATED:\2
- Find:
^DTEND;VALUE=DATE:([0-9T]+)$\r
Replace: Leave blank (this will delete the line entirely) - Find:
^(LOCATION|TRNSP):.*?$\r
Replace: Leave blank - Find:
^DTEND;VALUE=DATE-TIME:([0-9T]+)$
Replace:DTSTART;TZID=America/Denver:\1\rDUE;TZID=America/Denver:\1
- Yes, you can appropriately change the
TZID
if you know how, otherwise we’ll do it in the next step.
Here’s a screenshot of what the first regex should look like in TextWrangler:
Next, take an existing list from Reminders.app with at least one task and File -> Export
. Open this .ics
file up in the text editor as well. Find the section 4 or so rows down starting with BEGIN:VTIMEZONE
and ending at line 20 or so with END:VTIMEZONE
. Copy this section into your converted.ics
file right below PRODID:n8henrie.com
.
In that copied section, find the line beginning with TZID:
, and copy everything after that into the following, final regex:
- Find:
(?<=^DTSTART;TZID=)(.*?)(:[0-9T]+)$
Replace:COPIED_TZID\2
. That’s your copied value with\2
at the end, e.g.America/Denver\2
.
With all of that out of the way, you should now be able to save the .ics
file, right click and Open with
Reminders.app. As with importing a new .ics
file to your calendar, I recommend first importing into a temporary, throw-away Reminders list to make sure everything looks right, because otherwise you’ll probably have to manually sort out and delete tasks that didn’t work right.
There are probably some more advanced applications that some readers may be interested in. If so, I exported an example task list from Reminders.app with tasks featuring due date reminders, priorities, location-based reminders, titles, notes, etc., and uploaded it as a gist. You may see potential for something interesting based on its format.
Well, that’s it. Should you have questions or suggestions for improvement, leave them in the comments section below. Honestly, unless this post gets a lot of attention, I doubt that I’ll invest much time in improving this process, since it is kind of a pain.