(* OmniOutliner Pro to iCal To Do list exporter http://www.protozoic.com/2005/03/15/omnioutliner-to-ical-script/ By Tim Gray - http://www.protozoic.com/ scripts@protozoic.com This has not been tested with OmniOutliner. I would imagine if you are using OmniOutliner, just remove the "Professional" from the tell application lines. Hopefully this script will export all types of outlines. The ideal outline would have 4 columns, the main being "To Do", with 3 additional columns of "Date", "Priority", and "Category". "Date" should be a date type column, while the other two should be popups. The values I used for the priority popup is in the first line of the script: "Very Important", "Important", "Not Important", "None". This corresponds to the priority levels displayed by iCal. Values used for the Category column are left up to the end user. If a Category is not set, the item is placed in the "Misc" calendar in iCal - I like the ring of that more than "Unfiled". iCal calendars will be created for category values in which there is no corresponding iCal calendar. Outlines that have multiple levels will get exported to a flat listing as follows: -First -Two -Three -Four will get exported as two todo items, "First: Two: Three" and "First: Four". Hope this works for you. I'm sure this script could be prettied up a bit. I will leave that for others to do. Please feel free to change, modify, and customize this script. It would be great to hear back from you if do. *) set priority_words to {"Very Important", "Important", "Not Important", "None"} set priority_numbers to {1, 5, 9, 0} on list_position(this_item, this_list) repeat with i from 1 to the count of this_list if item i of this_list is this_item then return i end repeat return 0 end list_position tell application "OmniOutliner Professional" repeat with each_row in (every row of front document whose level > 0) if not ((has subtopics of each_row) or (state of each_row is checked)) then if (level of each_row is greater than 1) then set ancestor_topics to topic of ancestor of each_row set ancestor_topics to the reverse of ancestor_topics if (level of each_row is greater than 1) then tell AppleScript set text item delimiters to ": " set this_todo to ((text items of ancestor_topics) as string) & ": " & topic of each_row as string end tell end if else set this_todo to topic of each_row end if set this_todo_cat to "Misc" if exists (cell named "Category" of each_row) then set this_todo_cat to value of cell named "Category" of each_row end if if this_todo_cat is missing value then set this_todo_cat to "Misc" if this_todo_cat is "" then set this_todo_cat to "Misc" if exists (cell named "Priority" of each_row) then set this_todo_priority_word to value of cell named "Priority" of each_row if this_todo_priority_word is (missing value) then set this_todo_priority_word to "None" tell me set this_todo_priority to item (list_position(this_todo_priority_word, priority_words)) of priority_numbers end tell else set this_todo_priority to "No Priority" end if if exists (cell named "Date" of each_row) then set this_todo_date to value of cell named "Date" of each_row else set this_todo_date to "No Date" end if if this_todo_date is missing value then set this_todo_date to "No Date" end if if not (has subtopics of each_row) then set this_todo_note to note of each_row tell application "iCal" set the calendar_names to the title of every calendar set the calendar_name to this_todo_cat if not (calendar_names contains calendar_name) then create calendar with name calendar_name end if set this_calendar to (the first calendar whose title is the calendar_name) set ok_flag to 1 repeat with todo_list in (every todo of this_calendar) set todo_name to summary of todo_list if this_todo is todo_name then set ok_flag to 0 end if end repeat if ok_flag is 1 then set ical_todo to (make new todo at end of todo of this_calendar) set summary of ical_todo to this_todo (* set description of ical_todo to this_todo_note *) if (this_todo_date is not equal to "No Date") then set due date of ical_todo to this_todo_date end if if (this_todo_priority is not "No Priority") then set priority of ical_todo to this_todo_priority as integer end if end if end tell end if end if end repeat end tell