Lotus notes lotusnotes:显示一个月中的几天,在它的工作日之后

Lotus notes lotusnotes:显示一个月中的几天,在它的工作日之后,lotus-notes,lotus-domino,lotusscript,Lotus Notes,Lotus Domino,Lotusscript,我有一个不太好的问题。我已经思考这个问题一个月了,读了几本书,但似乎能找到答案或如何执行。大家都知道,我正在制作这个生成日期的应用程序。我有一个组合框,它有几个月,从1月到12月,两列表格,第一列显示日期,第二列显示工作日,在选择月组合框时,它必须按行在第一列和第二列显示该月的日期。示例:我选择一月,在第一列它将显示该月的日期,第一行是1,第二行是2,依此类推,与工作日相同。我是新来的。你能给我一个主意吗?希望你能帮助我。真正的动态表格很难。在这种情况下,这是完全可能的,因为您有一个定义的行数,

我有一个不太好的问题。我已经思考这个问题一个月了,读了几本书,但似乎能找到答案或如何执行。大家都知道,我正在制作这个生成日期的应用程序。我有一个组合框,它有几个月,从1月到12月,两列表格,第一列显示日期,第二列显示工作日,在选择月组合框时,它必须按行在第一列和第二列显示该月的日期。示例:我选择一月,在第一列它将显示该月的日期,第一行是1,第二行是2,依此类推,与工作日相同。我是新来的。你能给我一个主意吗?希望你能帮助我。

真正的动态表格很难。在这种情况下,这是完全可能的,因为您有一个定义的行数,但它仍然有点混乱

我不知道有什么内置的东西可以很容易地告诉你每个月有多少天。我可能只是创建一个配置文档,其中包含年、月和numberOfDays字段,以及可用于查找的隐藏视图。您在很多地方都需要这样做,并且您不希望每次都进行查找,所以请在下拉列表之后、表格之前的隐藏计算字段中进行查找。(请确保设置属性,以便在更改下拉列表中的值后重新计算该字段。)调用类似daysInSelectedMonth的字段

显然,第一列很简单:只需创建表格并输入数字1到31,然后对第29行到第31行的单元格应用“隐藏时间”公式,这样,只有在daysInSelectedMonth是正确的天数时才会显示。在其他行中不需要隐藏

对于第二列,需要使用computed For display字段。我强烈建议将它们命名为像weekday_1,weekday_2,。。。weekday_31,以便您可以使用@ThisName和一些简单的字符串操作从字段名中提取数字。这将告诉你公式在哪一行,这是你的天数。这样做的好处是,您的公式在每个字段中都可以完全相同——只需在正确操作一次后剪切并粘贴到其他字段中即可


我建议您开始在weekday_31字段中使用公式,当您找到正确的公式时(在有31天的月份中显示正确的工作日,在没有31天的月份中显示空白),然后您可以将公式复制到其余字段。您需要使用@If来检测月份的天数是否正确——这很简单,闰年除外。我将把那部分留给你。如果月份没有正确的天数,只需将其返回“”,然后使用@f use@Date的最后一个子句为您正在处理的日期构建值,然后使用@Weekday函数显示值。

真正的动态表是很困难的。在这种情况下,这是完全可能的,因为您有一个定义的行数,但它仍然有点混乱

我不知道有什么内置的东西可以很容易地告诉你每个月有多少天。我可能只是创建一个配置文档,其中包含年、月和numberOfDays字段,以及可用于查找的隐藏视图。您在很多地方都需要这样做,并且您不希望每次都进行查找,所以请在下拉列表之后、表格之前的隐藏计算字段中进行查找。(请确保设置属性,以便在更改下拉列表中的值后重新计算该字段。)调用类似daysInSelectedMonth的字段

显然,第一列很简单:只需创建表格并输入数字1到31,然后对第29行到第31行的单元格应用“隐藏时间”公式,这样,只有在daysInSelectedMonth是正确的天数时才会显示。在其他行中不需要隐藏

对于第二列,需要使用computed For display字段。我强烈建议将它们命名为像weekday_1,weekday_2,。。。weekday_31,以便您可以使用@ThisName和一些简单的字符串操作从字段名中提取数字。这将告诉你公式在哪一行,这是你的天数。这样做的好处是,您的公式在每个字段中都可以完全相同——只需在正确操作一次后剪切并粘贴到其他字段中即可


我建议您开始在weekday_31字段中使用公式,当您找到正确的公式时(在有31天的月份中显示正确的工作日,在没有31天的月份中显示空白),然后您可以将公式复制到其余字段。您需要使用@If来检测月份的天数是否正确——这很简单,闰年除外。我将把那部分留给你。如果月份没有正确的天数,只需将其返回“”,然后使用@f use@Date的最后一个子句为您正在处理的日期构建值,然后使用@Weekday函数显示值。

这取决于以下几点: Web应用程序还是Notes客户端应用程序? 练习的最终结果是什么,即表格的用途是什么?仅用于显示目的

做一些假设(Notes客户端应用程序和仅用于显示的表),我看到了两种方法

一种简单的方法是创建包含31行和2列的表。 在您创建的单元格字段中:Day1、Weekday1、Day2、Weekday2等。 您还需要一个年份字段,除非它始终是当前年份。 在第29-31行上设置“隐藏时”公式,以在该行的“日期”字段为空时隐藏。 在选择月份的组合框的“高级属性”选项卡上,设置“值更改后运行退出/OnChange事件”。 在里面
Sub Exiting(Source As Field)
    Dim session As New NotesSession 
    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim monthName As String
    Dim YYYY As String
    Dim firstDate As NotesDateTime 
    Dim lastDate As NotesDateTime 
    Dim n As Double
    Dim i As Integer
    Dim dayname(1 To 7) As String

    dayname(1) = "Sunday"
    dayname(2) = "Monday"
    dayname(3) = "Tuesday"
    dayname(4) = "Wednesday"
    dayname(5) = "Thursday"
    dayname(6) = "Friday"
    dayname(7) = "Saturday"
    Set uidoc = ws.CurrentDocument
    YYYY = uidoc.FieldGetText("Year")
    monthName = uidoc.FieldGetText("Month")
    Set firstDate = New NotesDateTime("1 " & monthName & ", " & YYYY)
    Set lastDate = New NotesDateTime(firstDate.DateOnly)
    Call lastDate.AdjustMonth(1)
    Call lastDate.AdjustDay(-1)
    i = 0
    For n = Cdbl(firstDate.LSLocalTime) To Cdbl(lastDate.LSLocalTime)
        i = i + 1
        Call uidoc.FieldSetText("Day" & i, Cstr(i))
        Call uidoc.FieldSetText("Weekday" & i, dayname(Weekday(Cdat(n))))
    Next
    Call uidoc.Refresh()
End Sub
_days :=1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31;
_numberDays := @Day(@Adjust(@Adjust(@Date(@ToNumber(Year); @ToNumber(Month); 1); 0; 1; 0; 0; 0; 0); 0; 0; -1; 0; 0; 0));
@Subset(_days; _numberDays)
_weekdays := @Transform( @ToNumber(Days); "day"; 
    @Weekday(@Date(@ToNumber(Year); @ToNumber(Month); day)));
@Replace(@Text(_weekdays);
     "1":"2":"3":"4":"5":"6":"7";
    "Sunday":"Monday":"Tuesday":"Wednesday":"Thursday":"Friday":"Saturday")