使用C#中的interop.excel检测空白Excel单元格

时间:2015-02-10 15:21:20

标签: c# excel excel-vba vba

我正在尝试用C#中的Excel文档解析文本。问题是我找不到检测(和忽略)空白单元格的方法。

我搜索了这个论坛和其他许多人,但我仍然无法让它发挥作用。

我在Visual Studio 2010 C#中使用Microsoft.Office.Interop.Excel。打开Excel并在其中读取和存储数据我没有问题。它只是我不能跳过空白单元格所以我的程序将相应地存储空白值。

我用以下方式定义了我的woorksheet:

Excel.Application exApp = OpenExcel(); String mySheet = @"C:\sheet.xlsx"; Excel.Workbook wb = exApp.Workbooks.Open(mySheet); Excel.Worksheet ws = wb.Sheets[1];

我按ws.Cells[row, col]访问我的单元格。我尝试过不同的方法。仅举几例:

ws.Cells[row, col].Value2 == null
ws.Cells[row, col].Value == null
ws.Cells[row, col].Value == ""

并且还明确地使用Range对象     Excel.Range rng = ws.Cells[row, col] 使用rng.Value2

根据我使用的apprach,我得到不同的错误,来自HRESULT的异常:0x800A03EC就是其中之一。

我是否错过了一些基本的东西,当然这必须是一项共同的任务?

如果某种灵魂能够向我展示一种检测空白细胞的好方法,我会非常感激!

亲切的问候

3 个答案:

答案 0 :(得分:1)

你应该使用SpecialCells。例如。下面的代码将所有空单元格的值设置为零(vba代码)。

Range("e11:g16").SpecialCells(xlCellTypeBlanks).Value = 0

或者您可以像这样轻松循环所有空单元格:

For Each item In Range("e11:g16").SpecialCells(xlCellTypeBlanks)
   '...
Next

在同样的逻辑中,如果你想循环遍历非空的所有单元格:

 For Each item In Range("g10:h11").SpecialCells(xlCellTypeConstants)
        '...
 Next

答案 1 :(得分:1)

尝试使用Range对象的Text属性...

rng.Text == String.Empty

答案 2 :(得分:0)

试试这个:

if (ws.IsEmpty(Cells[row, col]))

我不确切地记得我是否有正确的语法从.NET移植到Excel,但这是我在Excel中的VB宏中使用的命令。

你也可以尝试IsNumeric(Cells [row,col] .Value)

Excel单元格的默认值为空(但我找不到MSN链接来验证这一点!)

请参阅:What is the difference between =Empty and IsEmpty() in VBA (Excel)?