为什么我在运行时使用此代码获得“无效的args”?

时间:2016-02-08 20:01:58

标签: c# string excel-interop invalid-argument invalidargumentexception

我有这个代码根据它包含的值有条件地格式化一个单元格:

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)传递给有条件地格式化单元格的方法。

它编译,但在运行时它失败并显示“无效的args”消息。为什么,我该如何解决?

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:1)

在此行中,您传递的是Value2

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

但是Value2是Excel中的Range对象,可能 - 不能直接在C#中使用。

看看D Stanley的评论(Thx!)谁清除了这一点。

以下是与此相关的问题:Casting Range.Value2 of Excel interop to string

尝试在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