LibreOffice 中的 INDIRECT 函数与 OpenOffice 中的不同

LibreOffice 中的 INDIRECT 函数与 OpenOffice 中的不同

我有一个在 OpenOffice 中变得相当不稳定的电子表格,我希望 LibreOffice 可能更可靠(我真的不想为 MS Excel 付费)。

我有一张工作表,其中有一列工作表名称(Col A),其他列中则有从这些工作表传输的数据。这在 OpenOffice 中可以正常工作,但在 LibreOffice 中则不行。

例如,我需要此页面上的单元格 B3 显示页面上单元格 L14 的内容,该单元格与单元格 A3 的内容同名。我在 OpenOffice 上使用的可以完美实现此目的的编码是=INDIRECT($A3&"!$L$14")。(我希望 B4 显示以 A4 命名的工作表的 L14 值,依此类推。)

在 LibreOffice 中打开同一个文件无法识别此编码,并且我的页面充满了 #REF! 警告。其余数据已顺利传输。

我尝试过改变单引号、双引号、与号、逗号和句号的多种排列组合,但仍然没有任何效果。

任何指点都将不胜感激。

答案1

它看起来像LibreOffice Calc使用.(点)而不是!(如Excel)来分隔引用中的工作表名称,因此您可以在公式中替换!.

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

编辑

您还可以尝试使用 打开LibreOffice Calc 并将Excel文档转换为.ods格式 File > Wizards > Document converter

答案2

LibreOffice Calc 的最新版本设置了一个新的每个文档选项:“字符串引用的引用语法”,这使得 INDIRECT 的行为更具互操作性。这是在我们加载任何 XLS 或 XLSX 文档时设置的,并且也作为选项保留在 ODF 文件中 - 因此,对于现代 LibreOffice 来说,这应该完全不是问题。感谢 Kohei Yoshida(在 Collabora)和 Bubli Behrens(在 CIB)。

答案3

我找到了一种方法,使公式与两个语法版本兼容并修复 #REF! 错误:

解决方案

代替

=INDIRECT("SheetName!A1")

或者

=INDIRECT("SheetName.A1")

您可以使用 IFERROR() 来传递这两种语法:

=IFERROR(INDIRECT("SheetName!A1");INDIRECT("SheetName.A1"))

解释

正如其他答案中正确指出的那样,不同的办公工具使用不同的语法来引用另一张表中的单元格。OpenOffice.org 和 Microsoft Office 使用感叹号!作为分隔符,但 LibreOffice 使用点.

通过使用其中一种语法,您的文件将在相应的办公解决方案中打开并正常评估,但在其他解决方案中会生成 #REF! 错误。

使用IFERROR()使用两种语法解决了这个不兼容问题。如果您使用 MS Excel 打开工作表,!则将评估第一个 INDIRECT() 语句(使用感叹号语法)。如果它是包含有效值的有效引用,则将返回该值作为结果。但是,如果您使用 LibreOffice 打开工作表,则第一个 INDIRECT() 语句将返回 #REF 错误,因此 IFERROR() 函数将尝试评估第二个 INDIRECT() 语句(使用点.语法)。

对于您来说,单元格 B3 的公式为:

=IFERROR(INDIRECT($A3&"!$L$14");INDIRECT($A3&".$L$14"))

相关内容