将 LibreOffice 总和应用于多个重命名的工作表

将 LibreOffice 总和应用于多个重命名的工作表

我有一个包含多张工作表的电子表格,每张工作表都跟踪一个特定主题。每张工作表中都有原始数据的列,以及一个单元格(始终在 F1 中),其中包含原始数据的计算统计数据。

我会定期添加新表。

我还想有一个“摘要”表,比如说,SUMF1 中的统计数据来自其他所有表。我知道我可以手动指定表,例如

SUM(FirstSheetName.F1;AnotherName.F1;...)

但每次添加新工作表时都需要手动维护该字段,我想我会忘记这样做。有没有办法指定一个公式来将(比如 glob 或类似的东西)应用于工作表名称,这样我就可以做更多类似的事情SUM(*.F1)

答案1

您可以使用两个小宏(确定最后一张表的名称)结合范围运算符和INDIRECT()功能。

首先,创建以下宏(Tools-> Macros-> LibreOffice Basic,创建一个新模块或使用默认模块;粘贴以下代码):

Function LastSheetName()
    Dim nSheetCount As Integer
    nSheetCount = ThisComponent.getSheets().Count
    LastSheetName = ThisComponent.getSheets().getByIndex(nSheetCount - 1).getName()
End Function

Function LastSheetCell(sCell)
    LastSheetCell = LastSheetName() & "." & sCell ' notice: sheet/cell separator may be "!"
End Function

注意:根据您的本地化设置,您可能必须用感叹号替换函数.中的点:LastSheetCell()

LastSheetCell = LastSheetName() & "!" & sCell

定义此宏后,您可以在工作表中使用此用户定义函数:

=LASTSHEETNAME()               ' returns e.g. "Sheet10" as String
=LASTSHEETCELL("F1")           ' returns e.g. "Sheet10.F1" as String
=INDIRECT(LASTSHEETCELL("F1")) ' returns a cell reference to "Sheet10.F1"

现在,您已经拥有构建最终公式所需的所有组件:

=SUM(FirstSheetName.F1:INDIRECT(LASTSHEETCELL("F1"))) ' returns the sum of FirstSheetName.F1; ...; LastSheetName.F1

请注意创建对最后一张工作表单元格的引用的公式:这:就是FirstSheetName.F1范围运算符。您也可以使用它来引用一系列工作表。摘自 OOo Calc 文档:

工作表 1.A3:工作表 3.D4:参考一个有 24 个单元格、4 列宽 × 2 行高 × 3 页深的长方体范围。

相关内容