有没有一种方法可以配置Libreoffice,以便引用空单元格的单元格也显示空单元格?

时间:2020-08-27 15:17:20

标签: libreoffice-calc

假设一个Libreoffice电子表格仅包含两个单元格,即A1和A2,则在单元格A1中具有字符串“ abc”,在单元格A2中具有字符串“ = A1”。

    |---+------+
    |   |   A  |  (Showing formulas)
    |---+------+
    | 1 | abc  |
    | 2 | =A1  |
    |---+------+

显然,单元格A2将显示与单元格A1相同的内容,即“ abc”,如下所示。

    |---+------+
    |   |   A  |  (Showing values)
    |---+------+
    | 1 | abc  |
    | 2 | abc  |
    |---+------+

此时,假定您删除单元格A1的内容,以使A1变为空。 A2会怎样?答:A2显示数字零。

    |---+------+
    |   |   A  |  (Showing values)
    |---+------+
    | 1 |      |
    | 2 |   0  |
    |---+------+

我认为这种行为是不合理的。我认为A2也应该什么也不显示!

我以为我可以通过调整一些配置来更改此设置,但我得到的内容有些晦涩,“工具-选项-公式-详细信息”,但效果不尽人意。

这里有一个具体的例子来支持我的论点,即标准行为确实是不合理的。给定电子表格:

    |---+------+------+------------------|
    |   |   A  |   B  |        C         | (Showing formulas)
    |---+------+------+------------------|
    | 1 |   2  |   4  | =average(A1:B1)  |
    | 2 | =A1  | =B1  | =average(A2:B2)  |
    |---+------+------+------------------|

显示为

    |---+---+---+---|
    |   | A | B | C | (Showing values)
    |---+---+---+---|
    | 1 | 2 | 4 | 3 |
    | 2 | 2 | 4 | 3 |
    |---+---+---+---|

假设我们删除A1。表格将显示

    |---+---+---+---|
    |   | A | B | C | (Showing values)
    |---+---+---+---|
    | 1 |   | 4 | 4 |
    | 2 | 0 | 4 | 2 |
    |---+---+---+---|

,我认为C2应该没有理由显示2。我认为它应该具有与C1相同的值,即4。毕竟,第2行本质上是在尝试复制第1行。

问题:有没有一种方法可以配置Libreoffice,以便一个单元 提到一个空单元格还会显示一个空单元格吗?

2 个答案:

答案 0 :(得分:0)

(至少)有两种方法可以处理空单元格引用:

1。全局隐藏零值

默认情况下,LibreOffice Calc显示零值(根据单元格格式,为0或为布尔值FALSE)。您可以在菜单Tools-> Options-> LibreOffice Calc-> View中更改此行为:在Display下,取消选中Zero Values

enter image description here

2。使用公式

虽然隐藏零值将全局应用于整个odt文件,但调整公式仅影响引用另一个单元格的单元格。除了简单的=A1,还可以使用以下代码:

=IF(A1="";""; A1)

该公式将检查引用的单元格是否为空,并在这种情况下返回空字符串,否则返回引用的单元格的值。如果引用的单元格为空,则引用的单元格也将为空,而与Show Zero Values设置无关。

答案 1 :(得分:0)

稍微研究一下用户定义的功能(轻轻地 被@tohuwawohu推动这样做),这是我的解决方案,用 在不了解用户定义函数之前,我已经理解该语言,并在6.0.7.3版中进行了测试。

  1. 通过菜单栏,转到Tools-Macros-Organize Macros-LibreOffice Basic...

  2. 单击标记为Organizer...的按钮

  3. 在小窗口上,选择当前电子表格的名称

  4. 单击标记为New...的按钮,然后输入模块的名称,说“ MyModule”,然后单击Ok

  5. 返回窗口“ LibreOffice Basic宏管理器”,单击Edit

  6. 您现在位于IDE(集成开发环境)中,您将在其中定义功能。首先,单击右上角大窗口中的任意位置以将其激活。

  7. 转到最后一行并输入:

    Function id(x)
        id = x
    End Function
    

这将创建一个名为id的用户定义函数,该函数实际上是身份函数。

就是这样。现在,为了对其进行测试,请返回工作表窗口(例如,通过菜单栏选项Window)并输入以下内容

    |---+---------+---------+-----------------|
    |   |    A    |    B    |       C         | (Showing formulas)
    |---+---------+---------+-----------------|
    | 1 |       2 |       4 | =average(A1:B1) |
    | 2 | =id(A1) | =id(B1) | =average(A2:B2) |
    |---+---------+---------+-----------------|

您应该看到的

    |---+---+---+---|
    |   | A | B | C | (Showing values)
    |---+---+---+---|
    | 1 | 2 | 4 | 3 |
    | 2 | 2 | 4 | 3 |
    |---+---+---+---|

现在这是最重要的部分:删除单元格A1。然后您将看到

    |---+---+---+---|
    |   | A | B | C | (Showing values)
    |---+---+---+---|
    | 1 |   | 4 | 4 |
    | 2 |   | 4 | 4 |
    |---+---+---+---|

我认为这是预期的行为!


结论:当您在单元格A2中输入=A1时,您不会完全了解 您在A1中。 Libreoffice做出了一个猜测(我认为不应该这样) 当A1为空时,您真正想要的A2为零。

使用=id(A1)(从逻辑上讲,这与=A1是无法区分的) Libreoffice被以某种方式阻止进行任何有趣的解释并提出 在A2中完全与在A1中一样,包括A1为空的情况。


引用丹·阿里利(Dan Ariely)的“可预测的非理性:塑造我们决策的隐性力量”的话:

“零历史悠久。巴比伦人发明了 零;古希腊人以崇高的态度辩论了这件事(怎么可能 什么都没有?);古代印度学者Pingala将零与 数字1获得两位数;玛雅人和罗马人 将其数字系统的一部分归零。但零终于找到了自己的位置 大约在公元498年,当时印度天文学家Aryabhatta躺在一张床上 早上,惊呼道:“ Sthanam sthanam dasa gunam”,翻译为, 大概是“价值的十倍之地”。有了这个主意 基于十进制的位值概念的诞生。现在零开始了:它 传播到阿拉伯世界,在那里蓬勃发展;越过伊比利亚人 半岛到欧洲(由于西班牙的摩尔人);有一些调整 来自意大利人;最终航行到新大陆, 零最终找到大量就业机会(连同 数字1)放在硅谷。”

我会很谦虚地补充说,电子表格承认某些代表 “虚无”甚至比零更空灵 本身:一个空单元格!