2016-06-15 7 views
0

次のコードブロックを使用して、行数が毎回変更される場合は、どのように合計式を書くことができますか?私はそれをC11:C33とD11:D33の合計にハードコーディングしましたが、私はそれから離そうとしています。私は、最初と最後の値を呼び出してそれを範囲として使うことができますが、構文には苦労しています。
これは非常に新しいので、謝罪/事前に感謝!どのようにC#で動的リストを集計しますか?

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

理由だけworksheet.Cellsのような式が何か[行、TotalCol ++]式= "SUM(" + startColRow +:+ endColRow + "" ")" にしない、これは私が探している正確に何である –

+0

@AlexKrupka。 for、しかし私はどのようにcol /行の値をstartColRow/endColRowに格納するのかわかりません。 –

+0

あなたは明らかにできますか?変数の割り当て(これらの変数をどのように渡すか)や、どのセルがExcelドキュメントでアクティブであるかを把握するのに苦労していますか? –

答えて

0

リストをGetRowMinAndMaxメソッドに渡します。このメソッドは、リストがnullまたは空ではないことを前提としてyoureのそのない列にわたってため、単一の列

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()); 
} 

実際にEDIT

このすべてはおそらくオーバー合併症に範囲を探していること。あなたが入れ最初の要素を取り出しているので、リストが順序付けされていないためlist.First()が動作しない理由がある。あなたはまず

var orderedList = list.orderBy(s=> s); 

を呼び出すことによって、リストを注文するPROBことができ最後はうまくいくでしょう。

0

編集したAlexさんを見て、あなたの助けをありがとう。タプルの解決策は私の頭の少し上にあった。以下は完璧に働いていて、とても簡潔だったことです。私の合計が欲しいもののための変数を作成し、+ =演算子を使って各行の反復でインクリメントします。それからちょうど私のforeachループの外でそれを呼んだ。

      int? totalClientURL = 0; 
          int? totalHgURL = 0; 
           foreach (var d in results5) 
           { 
            int col = 6; 

            worksheet.Cells[row, col++].Value = d.employees_range; 
            worksheet.Cells[row, col].StyleName = styleData; 
            worksheet.Cells[row, col++].Value = d.client_url_count; 
            totalClientURL += d.client_url_count; 
            worksheet.Cells[row, col].StyleName = styleData; 
            worksheet.Cells[row, col++].Value = d.url_count; 
            totalHgURL += d.url_count; 


            row++; 

            ExportCount++; 
            if (ExportCount % 100 == 0) 
             Worker.ReportProgress(20, ExportCount + " rows exported of " + TotalRows); 
           } 

           int TotalCol = 6; 
           worksheet.Cells[row, TotalCol++].Value = "Total"; 
           worksheet.Cells[row, TotalCol].StyleName = styleData; 
           worksheet.Cells[row, TotalCol++].Value = totalClientURL; 
           worksheet.Cells[row, TotalCol].StyleName = styleData; 
           worksheet.Cells[row, TotalCol++].Value = totalHgURL;         
関連する問題