-1

我在一个applescript中有这条线:

    if start_period ≤ currentDay and currentDay ≤ end_period then

--create the appointment

这是 start_period = 1 和 end_period = 15 的结果:

    tell application "AppleScript Editor"
    display dialog "Current day:  1"
        --> {button returned:"OK"}
end tell
tell application "iCal"
    make new event at end of calendar "Manpower" with properties {summary:"CD", start date:date "Sunday, January 1, 2012 12:00:00 AM", end date:date "Sunday, January 1, 2012 12:00:00 AM", allday event:true}
        --> event id "D6FC11E3-17EB-4F49-8491-ECF8F08E5B56" of calendar id "7DC7F2B9-EF4C-4BFC-9D25-6061D71704F0"
end tell
tell application "AppleScript Editor"
    display dialog "Current day:  2"
        --> {button returned:"OK"}
    display dialog "Current day:  3"
        --> {button returned:"OK"}
    display dialog "Current day:  4"
        --> {button returned:"OK"}
    display dialog "Current day:  5"
        --> {button returned:"OK"}
    display dialog "Current day:  6"
        --> {button returned:"OK"}
    display dialog "Current day:  7"
        --> {button returned:"OK"}
    display dialog "Current day:  8"
        --> {button returned:"OK"}
    display dialog "Current day:  9"
        --> {button returned:"OK"}
    display dialog "Current day:  10"
        --> {button returned:"OK"}
end tell
tell application "iCal"
    make new event at end of calendar "Manpower" with properties {summary:"Duty", start date:date "Tuesday, January 10, 2012 12:00:00 AM", end date:date "Tuesday, January 10, 2012 12:00:00 AM", allday event:true}
        --> event id "5C52EFAA-287A-4879-B549-FDDD225853DA" of calendar id "7DC7F2B9-EF4C-4BFC-9D25-6061D71704F0"
end tell
tell application "AppleScript Editor"
    display dialog "Current day:  11"
        --> {button returned:"OK"}

然后从 11 开始,它的行为就像我认为的那样。谁能告诉我我做错了什么?

谢谢您的帮助,

罗兰

编辑(添加代码):

set theDoc to (choose file with prompt "Choose source files" with multiple selections allowed without invisibles) as string

-- choose destination folder
set sourceFolder to choose folder with prompt "Choose a folder to contain files:"

display dialog "Date to begin import" default answer "First Day..."
set start_day to date (text returned of result)

display dialog "Date to complete import" default answer "Last Day…"
set end_day to date (text returned of result)

--remove all current appointments
tell application "iCal"
    set theCalendars to title of every calendar
    tell calendar "Manpower" -- your calendar here
        set theEvents to every event whose (start date is greater than or equal to start_day) and (start date is less than or equal to the end_day)

        repeat with current_event in theEvents
            delete current_event
        end repeat
    end tell
end tell

--display dialog "delete complete"

--set the returned_events to every event of calendar 1 ¬ 
--whose (start date is greater than or equal to start_day) and ¬ 
--(start date is less than or equal to the end_day) 
--remove all csv files from source folder
tell application "Finder"
    delete (files of sourceFolder)
end tell


--Get user name
display dialog "What's your last name?" default answer "My last name is..."
set theName to (text returned of result)

--save csv files
tell application "Microsoft Excel"
    open file theDoc
    tell workbook 1
        repeat with a from 1 to 12
            tell sheet a
                set myFileName to sourceFolder & "month" & a & ".csv" as string

                save in myFileName as CSV file format
            end tell
        end repeat
        close without saving
    end tell
end tell

    repeat with b from 1 to 12
    set start_month to (month of (start_day)) * 1
    set end_month to (month of (end_day)) * 1

    if b ≥ start_month then
        if b ≤ end_month then

            tell application "Finder"

                set curFileName to (sourceFolder as text) & "month" & (b as text) & ".csv"
                set workingFile to read file (curFileName)

                -- break the file down into rows
                set AppleScript's text item delimiters to {ASCII character 13}
                -- theContents is a list of all the rows
                set theContents to text items of workingFile as list
            end tell


            --rowTwo is the list of names
            set rowTwo to item 2 of theContents
            set AppleScript's text item delimiters to {","}
            set rowParts to (every text item in rowTwo)

            --Find the name entered by the user and return its number (nameNumber
            set nameNumber to findName(rowParts, theName)

            try

                repeat with j from 1 to the count of theContents

                    if j > 2 then
                        set AppleScript's text item delimiters to {","}
                        set currentItem to text item j of theContents
                        set currentRow to text items of currentItem

                        set rowCount to count (currentRow)

                        --if we have passed the first two row (pass info and column headers) then start gathering duty information
                        if rowCount > 2 then
                            --dutyStat is duty status
                            set dutyStat to item nameNumber of currentRow
                            set statCount to count (dutyStat)


                            set dutyDate to text item 1 of currentRow
                            set myCount to count (dutyDate)

                            --to ensure that we have an actual date in the field
                            if myCount > 4 then

                                set AppleScript's text item delimiters to "-"
                                set dutyDateT to text items of dutyDate as list
                                set dutyTwo to text items of dutyDateT
                                set datePartC to count (dutyDateT)
                                set currentDay to text item 1 of dutyTwo as string
                                set currentMonth to text item 2 of dutyTwo as string
                                set AppleScript's text item delimiters to {","}
                                set dutyDateToo to date ((b as text) & " " & currentDay & " " & "2012")
                                set start_period to (day of (start_day))
                                set end_period to (day of (end_day))

                                display dialog "Current day:  " & currentDay
                                --if (currentDay as text) ≥ (start_period as text) then
                                --display dialog "Larger than the start.  Current day:  " & currentDay & ".  Start period:  " & (start_period as text)
                                --if (currentDay as int) ≤ (end_period as text) then
                                --display dialog "smaller than the complete…creating appt Current day:  " & currentDay & ".  End period:  " & (end_period as text)
                                if start_period ≤ currentDay and currentDay ≤ end_period then
                                    --create the appointment
                                    tell application "iCal"
                                        tell calendar "Manpower"

                                            make new event at end with properties {summary:dutyStat, start date:dutyDateToo, end date:dutyDateToo, allday event:true}
                                        end tell
                                    end tell
                                    --end if
                                end if
                            end if
                        end if
                    end if

                end repeat
            on error errMsg
                display dialog "ERROR on date:  " & item 1 of currentRow & ".  The error is:  " & errMsg


            end try
        end if
    end if
end repeat

    on findName(rowList, theItem)
    repeat with i from 1 to the count of rowList
        if item i of rowList is theItem then return i

    end repeat

end findName
4

1 回答 1

0

问题是您将数字与此行中的文本if start_period ≤ currentDay and currentDay ≤ end_period then进行比较。

set currentDay to text item 1 of dutyTwo as string--> currentDay是一个字符串

set start_period to (day of (start_day))--> start_period是一个整数,end_period也是一个整数

用这个set currentDay to (text item 1 of dutyTwo) as integer

于 2012-07-23T20:04:50.650 回答