使用下面的代码块,当行数每次都改变时,如何编写求和公式?我把它硬编码为C11:C33和D11:D33,但我试图摆脱它。我知道我可以调用第一个和最后一个值并将其用作范围,但我在语法上苦苦挣扎。
对此非常陌生,所以道歉/先谢谢!
using (FulfillmentEntities DB3 = new FulfillmentEntities())
{
TotalRows = results5.Count();
foreach (var d in results5)
{
int col = 2;
worksheet.Cells[row, col++].Value = d.Category;
worksheet.Cells[row, col++].Value = d.intA;
worksheet.Cells[row, col++].Value = d.intB;
row++;
}
int TotalCol = 2;
worksheet.Cells[row, TotalCol++].Value = "Total";
worksheet.Cells[row, TotalCol++].Formula = "SUM(C11:C33)";
worksheet.Cells[row, TotalCol++].Formula = "SUM(D11:D33)";
}
答案 0 :(得分:0)
只需将列表传递给GetRowMinAndMax方法即可。此方法假定列表不为null或为空,并且您要在单列中查找范围
public Tuple<string,string> GetRowMinAndMax(List<string> colRows)
{
var rowLow = colRows.Min(ExtractRow);
var rowMax = colRows.Max(ExtractRow);
var col = ExtractCol(colRows.First());
return Tuple.Create(col + rowLow, col + rowMax);
}
public int ExtractRow(string colRow)
{
return int.Parse(new string(colRow.Where(char.IsDigit).ToArray()));
}
public string ExtractCol(string colRow)
{
return new string(colRow.Where(char.IsLetter).ToArray());
}
修改的
实际上这可能是一个过于复杂的问题,因为它不是跨列。 list.First()不起作用的原因是因为列表没有排序,所以你要取出你放入的第一个元素。你可以通过调用
来排序列表var orderedList = list.orderBy(s=> s);
然后第一个也是最后一个会起作用。
答案 1 :(得分:0)
刚看到你的编辑Alex,谢谢你的帮助。元组解决方案有点过头了。以下是我最后完成的工作,非常简洁。为我想要的总数创建了一个变量,并使用+ =运算符在每次迭代时递增它。然后在我的foreach循环之外调用它。
WorksheetFunction