错误522:循环引用

时间:2016-03-25 17:08:27

标签: libreoffice libreoffice-calc

我有一个大型电子表格:700多行,每行都有对前一行的引用。我使用参考函数:ROW()COLUMN()INDIRECT()ADDRESS()。 (是的,我考虑过每50-100行固定一次,以减少计算量。)

直到最近我才使用OpenOffice.org,它运行良好。但是,当文件打开时,LibreOffice似乎在某些行之后放弃,并且进一步的计算变为错误522.有时,更改会使其重新计算所有并且当我撤消更改时错误消失并且不再出现。我还发现了Ctrl-Shift-F9(必须重新计算),这也会使错误消失。

即使文件已经被LibreOffice保存并重新保存了几次,当我打开文件时它仍然报告错误错误522,所以它似乎不是兼容性问题。

问题是一个非常长的分支计算轨迹使软件认为它永远不会达到初始值,因此它必须是循环的? (我对修复价值的想法会解决。)或者可能还有其他我可能错过的东西?

更新

我不知道INDEX()会如何帮助。我想直接在上面的一个单元格或上面一行中的单元格。单元格d46可以指向d45或b45或$ a45,这在复制行时会起作用,但在插入或删除行时则不行:如果在上面插入一行,指向上面一行的引用将开始指向上面的两行,所以每次我都要编辑公式。行(每行)包含对上面一行的几个引用,所以我认为对于同一列或者INDIRECT(ADDRESS(ROW()),最简单的方法是INDIRECT(ADDRESS(ROW() - 1,COLUMN())) -1,1))对于A列......任何更好的解决方案?

1 个答案:

答案 0 :(得分:0)

我不知道问题的具体细节,但听起来像你建议的那样有助于简化公式。

另一种可能性是编写宏来处理一些计算工作。除了Basic之外,宏可以用Java编写,你似乎很熟悉它。可以从电子表格函数调用宏,也可以在加载文档时调用宏。

使用更强大的工具(如LibreOffice Base和MySQL)也可能有所帮助。通常需要大量INDIRECT()ADDRESS()的电子表格才真正使用数据库类型逻辑。