错误的数据类型值
Wrong data type value
我一直在 windowsExcel 中做一个项目,但现在我必须将其更改为 LibreOffice Calc 和函数 returns #VALUE!
,但在 Excel.
中正常工作
这是函数(它在特定列和行中搜索值)
=IFERROR(INDEX($B:$B00; SMALL(IF(ISNUMBER((SEARCH($F;$B:$B00))*
(SEARCH($G;$D:$D00))); ROW($D:$D00)-MIN(ROW($D:$D00))+1;"");ROW(A21)));"")
这是我的工作表,也就是 LibreOffice Calc 中的 SpreadSheet 的样子
我在某处读到引号不应该在那里,所以我尝试 Remove/Replace 它们并从一个单元格中获取值:
-当我 REMOVED Quotes "" 时,它返回一个 Random 单元格值
-当我 REPLACED Quotes "" 与数字 1 它返回了第一个人的值,但在下一个单元格中(因为它应该找到每个具有特定名字的人,或者如果留下 Blank 它应该找到 every Person 在文件中。
在 Excel 中,SEARCH
函数会将空白搜索单元格与所有查找单元格相匹配。在 Calc 中,空白单元格作为搜索条件将 return 出错。
要获得“return 如果搜索单元格为空则全部”行为,您需要将每个搜索包含在 IF
、return 数字中(因此ISNUMBER
函数 returns TRUE) 在搜索单元格为空的情况下:
IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)
因此您的完整公式将在单元格 F8 中输入 Ctrl
+Shift
+Enter
(因为这是一个数组公式):
=IFERROR(INDEX($B:$B00;SMALL(IF(ISNUMBER(IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)); ROW($D:$D00) - MIN(ROW($D:$D00))+1;"");ROW(A1)));"")
复制并粘贴您需要的任意多个单元格。如果要粘贴到大量单元格,可以通过在名称框(公式栏左侧)中键入范围(例如 F9:F1405
,然后按 Enter
来突出显示它们.
请注意,在低于 4.4.4.6 的 LibreOffice 版本中,IFERROR
函数不会抑制错误(请参阅 bug 95226)。在较新的版本中它应该可以像您期望的那样工作。
编辑
IFERROR
和 ISERROR
函数都传递了这个特定的错误,而不是 returning TRUE 或 FALSE(似乎是 OpenOffice 和 LibreOffice 当前版本中的错误 -请参阅 OpenOffice 维基页面 https://wiki.openoffice.org/wiki/Documentation/How_Tos/Calc:_ISERROR_function#Issues 的“问题”部分。
一个可能的解决方法是不将任何文本值传递给 SMALL
函数。 (如果找不到匹配项,上面的公式会将空文本字符串传递给 SMALL
函数,从而产生错误)。我们将传递数组中的最后一个行号而不是 ""
- 为了使范围内的 bottom-most 单元格起作用,在本例中为第 1398 行,必须是 space(或,如果工具→选项→OpenOffice Calc→查看→取消选中“显示零值”,则可以为空。
我们还将确保不告诉 SMALL
函数查找大于其提供的范围大小的排名。所以像这样:
=INDEX($B:$B00;SMALL(IF(ISNUMBER(IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)); ROW($D:$D00) - MIN(ROW($D:$D00))+1;1398);MIN(ROW(A1),1398)))
我一直在 windowsExcel 中做一个项目,但现在我必须将其更改为 LibreOffice Calc 和函数 returns #VALUE!
,但在 Excel.
这是函数(它在特定列和行中搜索值)
=IFERROR(INDEX($B:$B00; SMALL(IF(ISNUMBER((SEARCH($F;$B:$B00))*
(SEARCH($G;$D:$D00))); ROW($D:$D00)-MIN(ROW($D:$D00))+1;"");ROW(A21)));"")
这是我的工作表,也就是 LibreOffice Calc 中的 SpreadSheet 的样子
我在某处读到引号不应该在那里,所以我尝试 Remove/Replace 它们并从一个单元格中获取值:
-当我 REMOVED Quotes "" 时,它返回一个 Random 单元格值
-当我 REPLACED Quotes "" 与数字 1 它返回了第一个人的值,但在下一个单元格中(因为它应该找到每个具有特定名字的人,或者如果留下 Blank 它应该找到 every Person 在文件中。
在 Excel 中,SEARCH
函数会将空白搜索单元格与所有查找单元格相匹配。在 Calc 中,空白单元格作为搜索条件将 return 出错。
要获得“return 如果搜索单元格为空则全部”行为,您需要将每个搜索包含在 IF
、return 数字中(因此ISNUMBER
函数 returns TRUE) 在搜索单元格为空的情况下:
IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)
因此您的完整公式将在单元格 F8 中输入 Ctrl
+Shift
+Enter
(因为这是一个数组公式):
=IFERROR(INDEX($B:$B00;SMALL(IF(ISNUMBER(IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)); ROW($D:$D00) - MIN(ROW($D:$D00))+1;"");ROW(A1)));"")
复制并粘贴您需要的任意多个单元格。如果要粘贴到大量单元格,可以通过在名称框(公式栏左侧)中键入范围(例如 F9:F1405
,然后按 Enter
来突出显示它们.
请注意,在低于 4.4.4.6 的 LibreOffice 版本中,IFERROR
函数不会抑制错误(请参阅 bug 95226)。在较新的版本中它应该可以像您期望的那样工作。
编辑
IFERROR
和 ISERROR
函数都传递了这个特定的错误,而不是 returning TRUE 或 FALSE(似乎是 OpenOffice 和 LibreOffice 当前版本中的错误 -请参阅 OpenOffice 维基页面 https://wiki.openoffice.org/wiki/Documentation/How_Tos/Calc:_ISERROR_function#Issues 的“问题”部分。
一个可能的解决方法是不将任何文本值传递给 SMALL
函数。 (如果找不到匹配项,上面的公式会将空文本字符串传递给 SMALL
函数,从而产生错误)。我们将传递数组中的最后一个行号而不是 ""
- 为了使范围内的 bottom-most 单元格起作用,在本例中为第 1398 行,必须是 space(或,如果工具→选项→OpenOffice Calc→查看→取消选中“显示零值”,则可以为空。
我们还将确保不告诉 SMALL
函数查找大于其提供的范围大小的排名。所以像这样:
=INDEX($B:$B00;SMALL(IF(ISNUMBER(IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)); ROW($D:$D00) - MIN(ROW($D:$D00))+1;1398);MIN(ROW(A1),1398)))