PDA

View Full Version : AppleScript Help Needed - Delete Empty Rows


lesbrown
2007-02-22, 03:04 AM
I'm using OmniOutliner Pro to open text files and then export them as Keynote Presentations. When I do this, I invariably need to delete some empty rows that are created when I open the text file in OmniOutliner. I'd like to automate this process if possible, but I'm a complete newb when it comes to scripting. Can anyone help me with this conundrum?

Bill Van Hecke
2007-02-22, 12:02 PM
Hi!

A while back I wrote a script to do this very thing. Here it is:

tell front document of application "OmniOutliner Professional"
delete (rows whose topic is "")
end tell

That's it! Save that as a script and put it in your OmniOutliner scripts folder, and you're set.

lesbrown
2007-02-22, 01:52 PM
That's great. Thanks so much for the response.

RobTrew
2011-09-22, 01:46 AM
I find myself importing quite a lot of text files at the moment.

OO3 does this well, often preserving various kinds of indentation.
Unwanted blank rows are, however, common, and often need to be removed.

A slightly more cautious approach than the very useful script above might involve:

Selecting blank rows rather than immediately zapping them, (gives a chance to check)
preserving rows which have no topic but do have a note.


tell application id "OOut" to select (rows of front document where topic = "" and note = "")

(Even this, of course, may be too bold if there are additional columns which might contain data while the topic and note are blank)

RobTrew
2011-09-22, 06:35 AM
A sketch of something more cautious:

Aims to select only completely empty and childless rows.
(unchecked and childless, with neither topic nor note, nor any data in any other columns).

-- Ver 0.2 A little faster in documents without additional columns

-- SELECT ALL COMPLETELY EMPTY ROWS
-- i.e. rows which:
-- 1. ARE UNCHECKED
-- 2. HAVE NEITHER TOPIC NOR NOTE
-- 3. HAVE NO DATA IN OTHER COLUMNS
-- 4. HAVE NO CHILDREN

property plstEmpty : {"", missing value, "unchecked"}

tell application id "OOut"
if (count of documents) < 1 then return
select my EmptyRows(front document)
activate
end tell

on EmptyRows(oDoc)
tell application id "OOut"
tell oDoc
-- COLLECT A LIST OF UNCHECKED CHILDLESS ROWS WHICH HAVE NEITHER TOPIC NOR NOTE,
set refRows to a reference to (rows where topic = "" and note = "" and state = unchecked and has subtopics = false)

-- AND WHICH HAVE NO DATA IN ANY OTHER COLUMNS
if (count of columns) > 2 then
set lstEmpty to {}
set {lstID, lstValue} to {id, (value of cells)} of refRows
repeat with i from 1 to length of lstID
set blnEmpty to true
repeat with oValue in item i of lstValue
if oValue is not in plstEmpty then
set blnEmpty to false
exit repeat
end if
end repeat
if blnEmpty then set end of lstEmpty to item i of lstID
end repeat
else
return contents of refRows
end if

-- CONVERT ID LIST TO LIST OF ROWS
repeat with i from 1 to length of lstEmpty
set item i of lstEmpty to (row id (item i of lstEmpty))
end repeat
end tell
return lstEmpty
end tell
end EmptyRows



--