Found a pretty big bug involving leading zeroes that I just had the chance to encounter which caused the script to silently die when run from the AppleScript menuextra, yet run (incorrectly) from Script Editor. Should be good.
[UPDATE] Changed to manually enter number up, prompt for total number of finished pieces instead of ending number, and prompts to reverse order the numbers in case you have a rip that won’t do it on output (multi copies using “VDP” for me).
An AppleScript to generate a numbering table in comma separated value format. Works great with InDesign's data merge function.
The script will now prompt for leading zeroes. Hopefully the dialog instructions are clear enough. The default is to pad the start number to match the end number.
This started as a simple 1-up script for numbering tickets using a laser printer. This version will handle up to a 5-up layout (labeled piece1, piece2, etc.), but can be easily modified to do more by adding to the “columns_list”.
For usage of InDesign's data merge functions, search for "data merge" in InDesign's help.
-- http://strawhousepig.net/
on my_trim(text_to_trim)
set the character_count to the number of characters of the text_to_trim
set the new_text to (characters 1 thru (the character_count - 1) of the text_to_trim) as string
return new_text
end my_trim
set columns_n to text returned of (display dialog "How many up will pieces be printed?" default answer "1" with title "N-up")
set columns_text to ""
if columns_n is not false then
repeat with n from 1 to columns_n
set columns_text to columns_text & "n" & n & ","
end repeat
set columns_text to my_trim(columns_text)
else
return
end if
on zero_pad(the_input, the_zeroes)
set the_input to the_input as string
set n to count of characters in the_input
if n < the_zeroes then
repeat until n = the_zeroes
set the_input to "0" & the_input
set n to n + 1
end repeat
end if
return the_input
end zero_pad
on my_sort(the_list, the_columns, the_zeroes)
set return_this to ""
set the_columns to the_columns as integer
set row_jump to (round ((count of the_list) / the_columns) rounding up) as integer
set row_jump_n to row_jump
if item 1 of the_list is greater than last item of the_list then
set row_jump_n to 0 - row_jump
end if
repeat with i from 1 to row_jump
set first_cell to item i of the_list as integer
set this_row to "" as text
if the_zeroes is not "0" then
repeat with c from 1 to the_columns
set this_row to this_row & zero_pad(first_cell, the_zeroes) & "," as text
set first_cell to first_cell + row_jump_n
end repeat
else
repeat with c from 1 to the_columns
set this_row to this_row & first_cell & "," as text
set first_cell to first_cell + row_jump_n
end repeat
end if
set return_this to return_this & my_trim(this_row) & return
end repeat
return return_this
end my_sort
set my_start to text returned of (display dialog "Enter the starting number" default answer "1")
if my_start is not "" then
set my_end to my_start + (text returned of (display dialog "How many to number (finished pieces)?" & return & return & ¬
"Note: There will be at least 1 number over to save as future starting reference." default answer "10"))
set the_zeroes to text returned of (display dialog "Leading zeroes. Enter count you need leading the end number " & ¬
"(start number will be padded to match)." & return & return & ¬
"'Fill' = pad to match end number. 001-100" & return & ¬
"'0' = no leading zeros. 1-100" & return & ¬
"'1' = 0001-0100" default answer "Fill")
if the_zeroes is in {"Fill", "fill"} then
set the_zeroes to (count of characters of (my_end as text))
else if the_zeroes is "0" then
set the_zeroes to "0"
else
set the_zeroes to (count of characters of (my_end as text)) + the_zeroes
end if
set num_list to {}
repeat with i from my_start to my_end
set end of num_list to i
end repeat
-- log num_list
set file_name to "numbering_table.csv"
if button returned of (display dialog "Varible Data Printing (VDP) may not allow for record reversal. Choosing \"Reverse\" will reverse the order of the numbers." & return & return & "NOTE: Due to rounding there may be erroneous numbers on last sheet when reversed. Check your CSV file to be sure they are acceptable (not too many)." buttons {"Cancel", "Reverse", "Forward"} default button "Forward" with title "Sort Order") is "Reverse" then
-- log "Reversing the numbers."
set num_list to reverse of num_list
-- log num_list
set file_name to "numbering_table_reverse.csv"
end if
set num_list to my_sort(num_list, columns_n, the_zeroes)
set columns_text to columns_text & return & num_list as text
tell application "Finder"
set the_file to choose file name with prompt "Save as" default name file_name
-- (*
set newFile to (open for access the_file with write permission)
set eof newFile to 0
write columns_text to newFile
close access newFile
--*)
-- do shell script "echo " & quoted form of columns_text & " > " & quoted form of POSIX path of the_file
end tell
end if