为什么我在运行时使用此代码获得“无效参数”
本文关键字:无效 参数 无效参数 代码 运行时 为什么 | 更新日期: 2023-09-27 18:33:48
我有此代码,可以在将单元格分配给单元格后,根据它包含的值有条件地格式化它:
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)传递给有条件地格式化单元格的方法。
它编译,但在运行时失败并显示"无效的参数"消息。为什么,我该如何解决它?
将公式设置为 Value2 后,此属性将返回计算值,在本例中为 int/double。因此,您无需解析该值。
只需将参数cellVal
类型更改为双精度:
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;
}
}
在这一行中,您传递了一个 Value2
ConditionallyHighlight(avgWeeklyDeliveriesCell.Value2, _xlSheet.UsedRange.Row);
但是 Value2 是 Excel 中的 Range-对象,并且 - 也许 - 不能直接在 C# 中使用。
看看D Stanley的评论(谢谢!)谁清除了这一点。
这是一个有点相关的问题:将 Excel 互操作转换为字符串的强制转换范围.值 2
尝试添加".ToString()" 在 Value2 之后,并注意 "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