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

Cannot perform runtime binding on null reference C# Excel

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

我收到以下错误 "Cannot perform runtime binding on null reference"。我明白错误的意思;本质上你不能 use/reference 为空的东西。但我以为我正在检查我的 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 等,我怎样才能阻止它解析这个字段?

你的逻辑好像有问题:

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

假设我们有例如item.Value2 == null,然后条件item.Value2 != "" returns true,就会进入if块,出现你描述的错误.

事实上我认为你应该只使用 && 而不要使用 ||:

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