我如何预测下一个单元格的位置? (写总计)

How do I predict the location of the next cell? (Writing the Grand Total)

您知道当您将 excel 中的单元格从一个单元格复制到另一个单元格时,公式会自动将 =Sum(A1+$B1) 替换为 =Sum(C1+$B1)

我想知道如何实现类似的东西,除了以编程方式完成。

这就是我想要实现的目标,我有一个 table 说,一个地方的行收入和列的项目,这是 pre-pivoted 数据,如果你是想知道,我想用一个总计来完成它,这个总计最初是缺失的。

Place     | Beans | Buns | Breads | etc
Bobby's   |   550 |   20 |     30 |  10
Sen's     |   550 |   20 |     30 |  10
Solaire's |   550 |   20 |     30 |  10

现在,我要在最后一行下面多写一行,在最后一列旁边多写一列,标题为 [Grand Total]。

所以,我猜我将需要一个 for 循环来 运行 通过我要生成的最后一行。像这样:

For (int i = 2; i < numberofColumns; i++) {
    string query = "=Sum(? : ?)"
    xlsWorksheet.Cells[ numberofRows + 1 , i].Formula = query;
}

如您所见,我不确定如何处理隐式单元格位置。棘手的部分是我希望这个算法循环到最后,而不必隐式定义特定的单元格。这是因为我可以有任意数量的额外列,或任意数量的额外行。重要的是我需要创建总计行和列。

期望的结果是:

Place     | Beans | Buns | Breads | etc | GrandTotal
Bobby's   |   550 |   20 |     30 |  10 |        610
Sen's     |   550 |   20 |     30 |  10 |        610
Solaire's |   550 |   20 |     30 |  10 |        610
          |  1650 |   60 |     90 |  30 |       1830

目前,这是在 C# 中完成的,目标是具有 Excel Interop 的 Excel 文档。我知道这也可以在 VBA 或 Excel 公式中完成,所以我将把它们都标记到这个 post。公式本身不仅仅是对行求和,但我就是不知道如何预测下一个单元格的位置。

这是一个选项,但我敢肯定它不是最有效的:

lCol = Sheets("SheetName").Cells(1, Sheets("SheetName").Columns.Count).End(xlToLeft).Column
lRow = Sheets("SheetName").Range("A" & Rows.Count).End(xlUp).Row

Sheets("SheetName").Cells(1, lCol + 1).Value = "Grand Total"

For i = 2 To lRow

    Sheets("SheetName").Cells(i, lCol + 1).Formula = "=SUM(RC[-" & lCol - 1 & "]:RC[-1])"

Next i

lCol = Sheets("SheetName").Cells(1, Sheets("SheetName").Columns.Count).End(xlToLeft).Column

For i = 2 To lCol

    Sheets("SheetName").Cells(lRow + 1, i).Formula = "=SUM(R[-" & lRow - 1 & "]C:R[-1]C)"

Next i