LibreOffice电子表格:选择具有特定过滤器的随机单元格

时间:2012-04-13 09:18:58

标签: select random filter spreadsheet libreoffice

西洛。

我在LibreOffice Spreadsheet上有以下场景

  • 在一个表格中,我有具体状态的条目

e.g:

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

e.g:

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

e.g:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

Projects

将三个过滤结果中的每一个定义为命名范围(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)
    )
)

使用此“条目”表:

Entries