如何检查单元格是否为空(Excel\VisualC#)

5
我的目标是逐行检查Sheet1中的内容,以发现有多少行数据。为此,我使用了一个do\while循环,应该在达到空单元格时停止。
例如:
row1 data row2 data row3 data row4 data row5 data row6 data row7 data
在这种情况下,我只需要前5行数据,因此do\while循环的检查旨在在达到空单元格时停止。但实际上,由于循环不再执行(即使找到填充有数据的空单元格,也只是完成一次循环就停止了)。
string str;
int rCnt = 11; //the data I need is after the 10th row in excel
int cCnt = 1;
int valori = 1;

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(label4.Text, 0, false, 5, "", "", 
                                                 false, Excel.XlPlatform.xlWindows, 
                                                 "", true, false, 0, true, false, 
                                                 false);
Excel.Sheets xlsheet = xlWorkbook.Worksheets;
string sheet1 = "Sheet1";
Excel.Worksheet xlWorksheet = (Excel.Worksheet)xlsheet.get_Item(sheet1);
Excel.Range xlCell;   

do
{
    rCnt++;
    str = "A" + rCnt;
    xlCell = (Excel.Range)xlWorksheet.get_Range(str, str);
} while (xlCell.Value2 == null);
    

我尝试将Value2更改为ValueText,并尝试使用==""而不是null来设置。


您可以使用 string.NullorEmpty 方法。 - Shyam sundar shah
我尝试使用“while (string.IsNullOrEmpty(xlCell.Value2));”但是它返回了这个错误:最佳重载方法匹配有一些无效的参数。 - Daniele
6个回答

4
如果你想在到达空单元格时停止循环,那么请尝试更改代码中的

while (xlCell.Value2 == null);

使用

while (! IsNull(xlCell.Value2));

1
我也尝试了这个,但它似乎无法识别“IsDBNull”这个单词。 我需要添加什么吗? - Daniele

2

检查单元格是否为空的简单方法:

 if (sheet.Cells[4,3] == null || sheet.Cells[4,3].Value2 == null || sheet.Cells[4,3].Value2.ToString() == "")
   MessageBox.Show(“cell on row 4 col 3 is empty”);

2
您可以使用所选单元格的Text属性。它可以通过"as"转换为字符串类型。结果字符串可以像在C#中一样进行常规检查,如非空。
string TempText = excelWorksheet.Cells[1, 1].Text as string;
if (!string.IsNullOrWhiteSpace(TempText)){
// actions
}

仅仅提供代码而没有任何解释很少有帮助。Stack Overflow 是关于学习的,而不是提供盲目复制和粘贴的片段。请编辑您的问题并解释它为什么比 OP 提供的更好。 - Chris
小心使用 Text,因为有时它可能会显示 "#####" 而不是所需的值。最好使用 Value2 - ΩmegaMan

1

问题主要出在不知道预期数据类型时。当我处理Excel读取时,经常会采取类似以下的方法:

var _cell = range.Cells[1, 2].Value2;
if (_cell.GetType() != typeof(Double))

如果您的实例总是返回字符串,那么您应该能够假定强制转换:
string _str = (string)(range.Cells[str, str] as Excel.Range).Value2;

然后检查它是否为空。

0
这对我有用:
使用 Excel = Microsoft.Office.Interop.Excel; 读取 Excel 表格:
var excelApp = new Excel.Application();
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(path, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);

Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelWorkbook.Sheets[2];

Excel.Range excelRange = excelWorksheet.UsedRange;
int rowCount = excelRange.Rows.Count;
int colCount = excelRange.Columns.Count;
string wwdEmpty = Convert.ToString(excelRange.Cells[5, 14].value2);
// this is working code with NULL Excell cell 

这不是正确的代码格式。请参考 代码格式化 文档,其中详细说明如何使用缩进和/或代码围栏来格式化代码。 - Hoppeduppeanut

-1
do
{
    rCnt++;
    str = Sheet.Cells[rCnt, 5].Value;
} while (str != null);

Sheet 被定义为 Excel._Worksheet Sheet; 它代表了你在 Excel 工作簿中的工作表。 - Joshua Ferdinand
你的回答中加入一些解释会很有帮助。考虑编辑你的回答(点击“编辑”链接)。 - Jean-François Corbett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接