Personally, I keep the complied script in ~/Library -> Scripts -> Applications -> iCal -> Export iCal todos to OO.scpt, so that it appears in the script menu only when iCal is frontmost...
set theCals to {}
set theTodos to {}
tell application "OmniOutliner"
activate
set doc_ID to make new document
--set doc_ID to document 1
set isStatusVisible of doc_ID to false
set topic of row 1 of doc_ID to "Master todo list"
tell application "iCal"
set theCals to calendars
set i to 1
repeat with a_Cal in theCals
set calTitle to title of calendar i
my newRow(doc_ID, calTitle, false)
repeat with aTD in todos of a_Cal
set TD_name to summary of aTD
my newRow(doc_ID, TD_name, true)
end repeat
set i to i + 1
end repeat
end tell
end tell
on newRow(doc_ID, txt, flIndent)
tell application "OmniOutliner"
set z to make with properties {topic:txt} new row at end of doc_ID
indent z
if flIndent then
-- there's some sort of bug that doesn't allow
-- indenting z twice in a row
set z to last row of doc_ID
indent z
end if
end tell
end newRow
[robg adds: I haven't tested this one.]

