如何预测下一个细胞的位置? (写总计)

时间:2017-05-09 14:33:08

标签: c# excel vba excel-vba epplus

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

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

这就是我想要实现的目标,我有一张桌子说,一个地方的行收入和列的项目,这是预先转动的数据,万一你想知道,我希望用一个总计完成它,最初缺少。

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

目前,这是使用Excel Interop在C#中定位Excel文档。我知道这也可以在VBA或Excel公式中完成,所以我要在这篇文章中标记这两个。公式本身不仅仅是简单地对行进行求和,而且我无法弄清楚如何预测下一个单元格的位置。

1 个答案:

答案 0 :(得分:1)

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

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