【问题标题】:Detect blank Excel cell using interop.excel in C#在 C# 中使用 interop.excel 检测空白 Excel 单元格
【发布时间】:2020-08-13 05:53:27
【问题描述】:

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

我在 Visual Studio 2010 C# 中使用 Microsoft.Office.Interop.Excel。我无法跳过空白单元格,因此我的程序将存储空白值。


我已经通过以下方式定义了我的工作表:

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

根据我使用的方法,我会收到不同的错误,HRESULT 的异常:0x800A03EC 就是其中之一。

【问题讨论】:

标签: c# excel vba


【解决方案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

【讨论】:

  • 这有助于但没有解决我的主要问题,即空白单元格仍然存在。 'Excel.Range 行 = ws.Rows[1]; Excel.Range rng = row.SpecialCells(Excel.XlCellType.xlCellTypeConstants);'完美地选择非空单元格。我可以使用 rng.Select 并在我的工作表中查看它们。但是当我将单元格值传输到数组时,空白单元格仍然存在。这真的很奇怪,因为 rng.Count 与非空单元格计数相同。有什么想法吗?
  • 也许您可以尝试遍历 rng 并将每个项目添加到列表中。如果需要数组,则将列表复制到数组中。
  • 我已经尝试过,但问题是我选择它时的范围仅突出显示工作表中的非空单元格。它的计数等于非空单元格,但如果我打印每个范围单元格 (rng[1, i].value.ToString()),范围内的一个单元格仍然是空白的。我不明白它是如何加起来的。
【解决方案2】:

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

rng.Text == String.Empty

【讨论】:

    【解决方案3】:

    试试这个:

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

    我不完全记得我是否掌握了从 .NET 移植到 Excel 的正确语法,但这是我在 Excel 中的 VB 宏中使用的命令。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多