C# VSTO - 使用 String.Empty 检查单元格是否为空
C# VSTO - Checking if a cell is empty using String.Empty
我继承了一个基于 C# 的 VSTO 项目,其中从电子表格读取大量数据然后进行处理。我在代码中的很多地方看到了以下内容:
(((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2 != null
&& ((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2.ToString().Length > 0)
此代码段在复制出正确的值之前检查单元格是否包含值。但是不会检查 String.Empty 在一行而不是两行中做同样的事情,或者是否存在尽管单元格中有值但会失败的情况?
没关系,我想通了。正在查看:
(((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2.ToString() != String.Empty
如果我正在执行 .ToString()
的单元格一开始恰好是空的,则
会失败。如果 Excel 认为该单元格具有字符串以外的格式,则检查 .value2 != String.Empty
也会失败。
我建议从打破 属性 链和方法调用开始,并在单独的代码行中声明它们中的每一个。因此,您将能够确定问题的原因(如果有)。此外,您还可以立即释放底层 COM 对象。使用 MSDN 中的 System.Runtime.InteropServices.Marshal.ReleaseComObject to release an Outlook object when you have finished using it. The set a variable to Nothing in Visual Basic (null in C#) to release the reference to the object. You can read more about that in the Systematically Releasing Objects 文章。它与 Outlook 相关,但同样的规则可以应用于任何 Office 应用程序。
我继承了一个基于 C# 的 VSTO 项目,其中从电子表格读取大量数据然后进行处理。我在代码中的很多地方看到了以下内容:
(((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2 != null
&& ((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2.ToString().Length > 0)
此代码段在复制出正确的值之前检查单元格是否包含值。但是不会检查 String.Empty 在一行而不是两行中做同样的事情,或者是否存在尽管单元格中有值但会失败的情况?
没关系,我想通了。正在查看:
(((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2.ToString() != String.Empty
如果我正在执行 .ToString()
的单元格一开始恰好是空的,则
会失败。如果 Excel 认为该单元格具有字符串以外的格式,则检查 .value2 != String.Empty
也会失败。
我建议从打破 属性 链和方法调用开始,并在单独的代码行中声明它们中的每一个。因此,您将能够确定问题的原因(如果有)。此外,您还可以立即释放底层 COM 对象。使用 MSDN 中的 System.Runtime.InteropServices.Marshal.ReleaseComObject to release an Outlook object when you have finished using it. The set a variable to Nothing in Visual Basic (null in C#) to release the reference to the object. You can read more about that in the Systematically Releasing Objects 文章。它与 Outlook 相关,但同样的规则可以应用于任何 Office 应用程序。