我有一个在 OpenOffice 中变得相当不稳定的电子表格,我希望 LibreOffice 可能更可靠(我真的不想为 MS Excel 付费)。
我有一张工作表,其中有一列工作表名称(Col A),其他列中则有从这些工作表传输的数据。这在 OpenOffice 中可以正常工作,但在 LibreOffice 中则不行。
例如,我需要此页面上的单元格 B3 显示页面上单元格 L14 的内容,该单元格与单元格 A3 的内容同名。我在 OpenOffice 上使用的可以完美实现此目的的编码是=INDIRECT($A3&"!$L$14")
。(我希望 B4 显示以 A4 命名的工作表的 L14 值,依此类推。)
在 LibreOffice 中打开同一个文件无法识别此编码,并且我的页面充满了 #REF! 警告。其余数据已顺利传输。
我尝试过改变单引号、双引号、与号、逗号和句号的多种排列组合,但仍然没有任何效果。
任何指点都将不胜感激。
答案1
答案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"))