1

含まれる値に基づいて、セルが割り当てられた後にセルを条件付きでフォーマットするこのコードがあります。

var avgWeeklyDeliveriesCell = (Excel.Range)_xlSheet.Cells[curDelPerfRow,
     AVG_WEEKLY_DELIVERIES_COLUMN];
avgWeeklyDeliveriesCell.Value2 = string.Format("=ROUND(AVERAGE(C{0}:I{0}), 
     2)", curDelPerfRow);
avgWeeklyDeliveriesCell.NumberFormat = "#,##0.00";    
ConditionallyHighlight(avgWeeklyDeliveriesCell.Value2,
   _xlSheet.UsedRange.Row);

private void ConditionallyHighlight(string cellVal, int rowIndex)
{
    int COL_K_INDEX = 11;
    float avgWeeklyDelivery = float.Parse(cellVal, 
        CultureInfo.InvariantCulture);
    if (avgWeeklyDelivery > delsPerWeek)
    {
        Excel.Range cellToHighlight = (Excel.Range)_xlSheet.Cells[rowIndex
            COL_K_INDEX];
        cellToHighlight.Interior.Color = OUT_OF_BOUNDS_HIGHLIGHT_COLOR;
    }
}

問題は cellVal にあります。String.Format() 呼び出しの結果をセルの Value2 プロパティに割り当ててから、その (value2) をセルを条件付きで書式設定するメソッドに渡すため、文字列のようです。

コンパイルされますが、実行時に「無効な引数」メッセージで失敗します。なぜ、どうすれば修正できますか?

4

2 に答える 2

2

式を Value2 に設定すると、このプロパティは評価された値を返します。この場合は int/double です。したがって、値を解析する必要はありません。

パラメータのcellVal型を double に変更するだけです。

private void ConditionallyHighlight(double cellVal, int rowIndex)
{
    int COL_K_INDEX = 11;
    if (cellVal > delsPerWeek)
    {
        Excel.Range cellToHighlight = (Excel.Range)_xlSheet.Cells[rowIndex,
            COL_K_INDEX];
        cellToHighlight.Interior.Color = OUT_OF_BOUNDS_HIGHLIGHT_COLOR;
    }
}
于 2016-02-08T20:58:15.197 に答える
1

この行では、Value2 を渡しています

ConditionallyHighlight(avgWeeklyDeliveriesCell.Value2, _xlSheet.UsedRange.Row);

しかし、Value2 は Excel では Range オブジェクトであり、C# では直接使用できない可能性があります。

この点をクリアした D Stanley さんのコメント (Thx!) をご覧ください。

どういうわけか関連する質問があります:Excel相互運用のRange.Value2を文字列にキャストする

Value2 の後に「.ToString()」を追加し、「null」の可能性に注意してください。より良い使用float.TryParse()

string YourString = "ImpossibleValue";
float f;
if (!float.TryParse(YourString, out f)) {
    //React on the failed parsing (default value, error... 
}
//go ahead with f, which holds the correct (or defaulted) value

ここにいくつかの背景があります: https://msdn.microsoft.com/en-us/library/office/ff193553.aspx

于 2016-02-08T20:33:24.537 に答える