我继承了一个基于C#的VSTO项目,其中从电子表格中读取大量数据然后进行处理。代码中的很多地方我都看到了以下内容:
(((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2 != null
&& ((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2.ToString().Length > 0)
此代码段会在复制出正常值之前检查单元格是否包含值。但是不会对String.Empty进行检查,而是在一行而不是两行中执行相同操作,或者是否存在尽管在单元格中有值但仍会失败的情况?
答案 0 :(得分:1)
没关系,我明白了。检查:
(((Excel.Range)sheet.Cells[rowIndex, columnIndex]).Value2.ToString() != String.Empty
如果我正在进行.ToString()
开启的单元格首先出现空白,则会失败。如果Excel将单元格视为具有字符串以外的格式,则检查.value2 != String.Empty
也将失败。
答案 1 :(得分:0)
我建议从打破属性和方法调用链开始,然后在单独的代码行中声明它们。因此,您将能够确定问题的原因(如果有)。您还可以立即释放基础COM对象。完成使用后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook对象。在Visual Basic中将变量设置为Nothing(在C#中为null)以释放对对象的引用。您可以在MSDN的Systematically Releasing Objects文章中详细了解相关内容。它与Outlook有关,但相同的规则可以应用于任何Office应用程序。