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