0

直升机。

我在 LibreOffice 电子表格上有以下场景

  • 在一张表中,我有特定状态的条目

例如:

id   state     name
----------------------------
1    open      OpenState
2    closed    ClosedState
3    resolved  ResolvedState
...
  • 在另一个表中,我列出了第一个表中具有随机State-ID 的项目列表。这很好用。

例如:

id   state   ProjectName
------------------------
1    1       Proj_1
2    1       Proj_2
3    2       Proj_3
...
  • 第三张桌子有问题。在此表中,我想生成测试数据。这些条目还具有来自第一个表的状态。现在我需要一个 LibreOffice 函数来为每个条目分配一个来自第二个表的随机项目,该项目与条目状态具有相同的状态

例如:

id   state   project   EntryName
--------------------------------
1    1       2         Entry_1
2    1       1         Entry_2
3    1       1         Entry_3
4    2       3         Entry_4
...
4

1 回答 1

0

IMO 这项任务超出了 calc 的可能性。主要问题是似乎没有返回行子集的公式(共享相同状态的项目)。这需要过滤,但似乎没有办法即时应用过滤。因此,如果不准备保存每个项目状态的第二张表,这将无法工作。

因此,IMO 最简单的解决方案是创建三个持久过滤结果,列出具有相同状态的项目。使用这些过滤器结果,您可以使用这些函数INDEXRANDBETWEEN随机选择一个项目 ID。

过滤项目可能会导致此工作表:

项目

将三个过滤器结果中的每一个定义为命名范围(ProjState1:$E$1:$G$4等),您可以使用以下公式:

=IF(($B2=1);INDEX(ProjState1;RANDBETWEEN(2;ROWS(ProjState1));1) ;IF(($B2=2);INDEX(ProjState2;RANDBETWEEN(2;ROWS(ProjState2));1);INDEX(ProjState3;RANDBETWEEN(2;ROWS(ProjState3));1)))

RANDBETWEEN 返回两个整数之间的随机数;第一个是 2(因为我已将标题作为范围的第 1 行包含在内),第二个是范围的最后一行)。INDEX 选择随机返回的行的值。

分成多行:

=IF(
    ($B2=1);
    INDEX(
        ProjState1;
        RANDBETWEEN(
            2;
            ROWS(ProjState1)
        );
        1
    );
    IF(
        ($B2=2);
        INDEX(ProjState2;RANDBETWEEN(2;ROWS(ProjState2));1);
        INDEX(ProjState3;RANDBETWEEN(2;ROWS(ProjState3));1)
    )
)

使用此“条目”表:

参赛作品

于 2012-04-14T16:30:54.540 回答