2017-10-11 129 views
1

我使用LibreOffice Calc电子表格来跟踪应收账款的工作情况。每张表单列出发票及其状态(付费,未付款等)以及有关每张发票的信息。我试图创建一个汇总表,列出每张表中的特定数据。手动创建工作表很容易,但我试图“自动化”该过程。如果添加新工作表(或删除工作表),我希望该摘要页面自动更新,因为我向该文件添加和删除帐户。通过索引号引用工作表

我知道LibreOffice为每张表分配一个索引号,我可以在某种公式中引用该索引号,但是我无法找到一个函数,我可以使用该索引号从它内部的单元格获取值时引用该索引号。人们会期望像Sheet(2)这样的函数会引用第二张纸,但是,唉,事实并非如此!

我试过使用间接和地址函数没有成功,但我不知道如果我不理解这些函数或如果他们不适合我想要完成。

回答

1

长期以来,这一直是Calc中缺失的一部分。首选的解决方案是编写用户定义的函数。电子表格公式不能通过索引号访问工作表,但Basic可以。

以下函数来自https://ask.libreoffice.org/en/question/16604/how-do-i-access-the-current-sheet-name-in-formula-to-use-in-indirect/

Function SheetName(Optional nSheet) 
If IsMissing(nSheet) Then 
    SheetName = ThisComponent.getCurrentController().getActiveSheet().getName() 
Else 
    SheetName = ThisComponent.getSheets().getByIndex(nSheet-1).getName() 
EndIf 
End Function 

然后像这样得到第一个单元格A1的相对地址。

=ADDRESS(1,1,4,,SHEETNAME(1)) 

稍微不同的功能在https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=49799给出。

+1

谢谢!我看过几个类似的功能,但似乎没有任何功能。这工作完美。对于使用它的其他人,将address()函数包装在indirect()函数中,以获取指定单元格的值。 –

+0

我刚刚打开了我使用此函数的文件,并且在加载时出现BASIC运行时错误。它说:“找不到属性或方法:getSheets”。一旦我清除了错误弹出窗口,函数使用的每个单元格都有!REF错误。但是,如果我更改公式,然后将其更改回来,它会再次运行。有任何想法吗? –

+0

我通过将功能从标准模块移动到特定于该文件的模块来解决问题。 –