无法对空引用C#Excel执行运行时绑定

时间:2018-08-20 16:05:27

标签: c# excel ssis nullreferenceexception

我发现了许多与此类似的问题,但没有一个解决我的问题。我正在使用SSIS和C#脚本读取和修改Excel工作簿的样式。

我收到以下错误“无法对空引用执行运行时绑定” 。我了解错误的含义;本质上,您不能使用/引用空值。但是我以为我正在检查我的IF语句中的所有NULL。

我正在使用的代码:

     int rows = xlWorkSheetTY.UsedRange.Rows.Count - 1;
     Excel.Range rge = xlWorkSheetTY.get_Range("J2:J" + rows, System.Type.Missing);
     foreach (Excel.Range item in rge.Cells)
     {
         if (item != null && (item.Value2 != null || item.Value2 != "" || item.Value2 != "NULL"))
         {
              decimal result = (decimal)0.00;
              if (decimal.TryParse(item.Value2.ToString(), out result))
                        {
                            if (result <= 20)
                            {
                                item.Interior.Color = Excel.XlRgbColor.rgbRed;
                                item.Font.Color = Excel.XlRgbColor.rgbWhite;
                            }
                        }
          }
      }

对于我为什么会收到此错误以及我该怎么办才能纠正此问题,有人有任何建议吗?

更新: 我插入了try catch语句,以尝试查找有关失败原因的更多详细信息。每次都在特定行上失败。我已经在原始Excel文件中查看了此行,并且数据为空。

如何防止它在不执行已有操作的情况下解析此字段-检查nulls等?

2 个答案:

答案 0 :(得分:1)

您的逻辑似乎有误:

if (item != null && (item.Value2 != null || item.Value2 != "" || item.Value2 != "NULL"))

假设我们有item.Value2 == null,然后条件item.Value2 != ""返回 true ,它将进入if块,从而导致您所描述的错误。

事实上,我认为您应该仅使用&&,而不能使用||

if (item != null && item.Value2 != null && item.Value2 != "" && item.Value2 != "NULL")

答案 1 :(得分:0)

事实证明,由于item.Value2是动态的,因此它是在运行时创建的,因此无法绑定ToString()方法。

所以不是

if (decimal.TryParse(item.Value2.ToString(), out result)) 

我需要使用:

if (decimal.TryParse(Convert.ToString(item.Value2), out result))

这解决了我的问题!