我有一个奇怪的问题
给定以下 libreoffice calc 表:
定义范围“myrange”,其内容如下:
一 | 二 | 三 |
---|---|---|
1 | 2 | 3 |
还有一个公式字段:
=myrange[Two]
结果是2
现在:昨天,我可以在 libreoffice 中创建这样一个文档,将其保存为 ods,关闭它,再次加载该文件,并且公式看起来如上所述。到目前为止,一切顺利。
今天,当我尝试同样的事情时,在加载已保存的文档后,公式发生了变化。现在它看起来像这样=$Sheet1.$B$2
。完全奇怪,特别是当我处理文档,保存它时,一切看起来都很好,但重新打开文件时,它看起来不一样了。我甚至没有更改文件格式。
在两次尝试之间,我尝试将第一张表导出为 Excel xlsx 和 xls 格式,也许这会改变一些全局设置?
是否有任何设置会影响 libreoffice 如何保存公式?
答案1
好的,没有解决方案,但我想我现在知道发生了什么:我昨天以 xlsx 格式保存了文件,并且可能从未尝试重新加载 ods。
似乎只有 xlsx 才能保存此公式。但该公式格式适用于 libreoffice,而 excel 不支持这种引用 - 太奇怪了。一旦我将其保存到 ods,公式就会以翻译形式保存(与 Excel 兼容但为 ods 格式)。
所以我可以选择
- 与 excel 兼容的 ods,这会混淆引用,使得以后很难更改或理解它们
- 与 excel 不兼容的 xlsx,它保留了公式但同时丢失了数据范围,因此经过 2-3 次保存/加载循环后,所有公式都会消失,
#NAME?[column]
我必须通过原始引用进行搜索替换(这仍然是目前最好的解决方法)
我仍然希望得到另一个答案,展示如何以 ods 格式保存这些公式:)
答案2
有两种不同类型的命名范围;它们实际上没有不同的名称,我认为这很令人困惑,但事实就是如此。一种类型简称为命名范围,另一种类型称为数据库范围。您可以以不同的方式访问/定义它们:
命名范围:工作表-->命名范围和表达式-->定义
数据库范围:数据-->定义范围
为了实现您的目标,您的公式应该是这样的:
=hlookup("Two", myrange, 2, 0)
据文献记载“数据库范围不能相对于工作表内的基地址进行引用,但使用命名范围则可以。“但我发现在 hlookup 公式中使用数据库范围也有效。但为了安全起见,我建议使用命名范围。
保存然后重新打开文件显示,在两种范围命名方法中,公式均未发生变化。