LibreOffice 电子表格:使用特定过滤器选择随机单元格
Posted
技术标签:
【中文标题】LibreOffice 电子表格:使用特定过滤器选择随机单元格【英文标题】:LibreOffice Spreadsheet: Select random cell with specific filter 【发布时间】:2012-04-13 09:18:57 【问题描述】:直升机。
我在 LibreOffice 电子表格上有以下场景
在一个表中,我有特定状态的条目例如:
id state name
----------------------------
1 open OpenState
2 closed ClosedState
3 resolved ResolvedState
...
在另一个表中,我列出了第一个表中具有 random State-ID 的项目。效果很好。
例如:
id state ProjectName
------------------------
1 1 Proj_1
2 1 Proj_2
3 2 Proj_3
...
第三张表有问题。在此表中,我想生成测试数据。这些条目还具有来自第一个表的状态。现在我需要一个 LibreOffice 函数来为第二个表中的每个条目分配一个 random 项目,该项目具有 same 状态作为条目状态
例如:
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】:IMO 这个任务超出了 calc 的可能性。主要问题是似乎没有返回行子集的公式(共享相同状态的项目)。这需要过滤,但似乎没有办法即时应用过滤。因此,如果不准备保存每个项目状态的第二个表,这将无法工作。
因此,IMO 最简单的解决方案是创建三个持久过滤结果,列出具有相同状态的项目。通过这些过滤结果,您可以使用函数INDEX
和RANDBETWEEN
随机选择一个项目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)
)
)
使用这个“条目”表:
【讨论】:
感谢您的解决方案。我会试试的。以上是关于LibreOffice 电子表格:使用特定过滤器选择随机单元格的主要内容,如果未能解决你的问题,请参考以下文章
Python UNO(libreoffice):如何为工作表启用自动过滤器
如何使用 C# 和 LibreOffice/OpenOffice 在电子表格单元格中设置粗体文本?
通过 Python 脚本更新之前打开的 LibreOffice 电子表格而不关闭 LibreOffice
在无头模式下将 libreoffice 电子表格合并到多页文档中?