Excel 获取AppleScript中当月的最后一天和当月的假日

Excel 获取AppleScript中当月的最后一天和当月的假日,excel,applescript,Excel,Applescript,我正在写一个AppleScript,每月生成一个MS Excel电子表格。我需要知道当前月份有多少天,然后遍历所有月份,确定给定的一天是工作日还是假日 我想我会为此保存假期(从这个web作为表并在本地访问它们) 我的问题是: 我如何得到一个月的最后一天 如何有效地循环当前月份的所有天,并确定是星期日、星期六还是其他地方指定的一天(例如,在xlsx电子表格的文本文件中) 下面的脚本包含您正在查找的两个例程:GetlastDay和isWorkingDay: set myDate to current

我正在写一个AppleScript,每月生成一个MS Excel电子表格。我需要知道当前月份有多少天,然后遍历所有月份,确定给定的一天是工作日还是假日

我想我会为此保存假期(从这个web作为表并在本地访问它们)

我的问题是:

  • 我如何得到一个月的最后一天
  • 如何有效地循环当前月份的所有天,并确定是星期日、星期六还是其他地方指定的一天(例如,在xlsx电子表格的文本文件中)

  • 下面的脚本包含您正在查找的两个例程:GetlastDay和isWorkingDay:

    set myDate to current date -- just for example !
    
    set N to GetlastDay(myDate)
    log N --> number of days in month of myDate
    set A to IsWorkingday(myDate)
    log A --> true if Monday to Friday, false if Saturday/Sunday
    
    
    on GetlastDay(LDate) -- return last day of month of LDate
    copy LDate to L -- to not change LDate
    set L's day to 32 -- = first day of next month
    set L to L - (1 * days) -- last day of month
    return day of L
    end GetlastDay
    
    on IsWorkingday(LDate) -- true if date is not Saturday or Sunday
    set SD to weekday of LDate
    return (SD is not in {Saturday, Sunday})
    end IsWorkingday
    

    下面的脚本包含您正在查找的两个例程:GetlastDay和isWorkingDay:

    set myDate to current date -- just for example !
    
    set N to GetlastDay(myDate)
    log N --> number of days in month of myDate
    set A to IsWorkingday(myDate)
    log A --> true if Monday to Friday, false if Saturday/Sunday
    
    
    on GetlastDay(LDate) -- return last day of month of LDate
    copy LDate to L -- to not change LDate
    set L's day to 32 -- = first day of next month
    set L to L - (1 * days) -- last day of month
    return day of L
    end GetlastDay
    
    on IsWorkingday(LDate) -- true if date is not Saturday or Sunday
    set SD to weekday of LDate
    return (SD is not in {Saturday, Sunday})
    end IsWorkingday
    
    很有希望,但是
    GetLastDay
    函数在少于31天的月份内不能正常工作;下面是一个修复以下问题的函数:

    #返回给定日期所在月份的天数。
    #例如:
    #我的GetNumberOfDaysInMonth(当前日期)
    在GetNumberOfDaysInMonth(aDate)上
    局部aDateCopy
    复制副本到副本副本
    将aDateCopy的日期设置为1
    如果aDateCopy的月份是12月,那么
    将副本年份设置为((副本年份)+1)
    将aDateCopy的月份设置为1
    其他的
    将副本月份设置为((副本月份)+1)
    如果结束
    返回日期(副本-1*天)
    结束GetNumberOfDaysInMonth
    
    该方法基于将日期设置为每月的第一天,然后增加月份(可能滚动到下一年),然后减去1天,这对所有日期都有效,即使在闰年也是如此;下面是一个修复以下问题的函数:

    #返回给定日期所在月份的天数。
    #例如:
    #我的GetNumberOfDaysInMonth(当前日期)
    在GetNumberOfDaysInMonth(aDate)上
    局部aDateCopy
    复制副本到副本副本
    将aDateCopy的日期设置为1
    如果aDateCopy的月份是12月,那么
    将副本年份设置为((副本年份)+1)
    将aDateCopy的月份设置为1
    其他的
    将副本月份设置为((副本月份)+1)
    如果结束
    返回日期(副本-1*天)
    结束GetNumberOfDaysInMonth
    

    该方法基于将日期设置为每月1日,然后增加该月(可能滚动到下一年),然后减去1天,这对所有日期都适用,即使在闰年。

    在香草AppleScript中,您也可以通过以下方式获取当前月份的最后一天:1)将变量设置为
    当前日期
    2)将该日期的
    日期属性设置为32以强制溢出。这将日期设置为下个月的第一天。3) 减去一天。让excel来计算不是更容易吗?有一个内置函数可以在一个步骤中完成所有这些…@vadian:这不是它的工作方式(至少在OS 10.8+):将以下3条语句粘贴到脚本编辑器中并运行它们,您将看到结果日期是3月3日,而不是3月1日(您可能需要调整日期字符串以匹配您的区域设置):
    将aDate设置为date“2016年2月1日“
    将aDate日期设置为32
    aDate
    。在vanilla AppleScript中,您可以通过以下方式获取当前月份的最后一天:1)将变量设置为
    当前日期
    2)将该日期的
    日期
    属性设置为32以强制溢出。这将日期设置为下个月的第一天。3) 减去一天。让excel来计算不是更容易吗?有一个内置函数可以在一个步骤中完成所有这些…@vadian:这不是它的工作方式(至少在OS 10.8+):将以下3条语句粘贴到脚本编辑器中并运行它们,您将看到结果日期是3月3日,而不是3月1日(您可能需要调整日期字符串以匹配您的区域设置):
    将aDate设置为date“2016年2月1日”
    将日期设置为32
    aDate
    。您的
    GetlastDay
    功能仅适用于31天的月份。您的
    GetlastDay
    功能仅适用于31天的月份。