好吧,我正试图从excel表中读取单元格。如果单元格没有值或为空,则返回false。我试过" null
" (sheet.getrow(a).getcell(b) == null
和sheet.getrow(a).getcell(b).celltype == celltype.Blank
)但是当单元格有空格或填充颜色时,它会返回false
。
谢谢,我已经坚持了好几天。 (如果你需要代码我可以编辑它。)
答案 0 :(得分:3)
一个小区是否是空的"部分取决于细胞是否实际存在(即非空),它是什么类型的细胞(字符串/数字/空白等)以及细胞中的值,取决于其类型。我会做一些扩展方法来使这个决定更容易。您可以根据需要调整它们。例如,如果您认为没有值但填充了颜色的单元格非空,则可以在IsNullOrEmpty
方法中添加对该单元格的检查。
public static class NpoiExtensions
{
public static bool IsCellNullOrEmpty(this ISheet sheet, int rowIndex, int cellIndex)
{
if (sheet != null)
{
IRow row = sheet.GetRow(rowIndex);
if (row != null)
{
ICell cell = row.GetCell(cellIndex);
return cell.IsNullOrEmpty();
}
}
return true;
}
public static bool IsNullOrEmpty(this ICell cell)
{
if (cell != null)
{
// Uncomment the following lines if you consider a cell
// with no value but filled with color to be non-empty.
//if (cell.CellStyle != null && cell.CellStyle.FillBackgroundColorColor != null)
// return false;
switch (cell.CellType)
{
case CellType.String:
return string.IsNullOrWhiteSpace(cell.StringCellValue);
case CellType.Boolean:
case CellType.Numeric:
case CellType.Formula:
case CellType.Error:
return false;
}
}
// null, blank or unknown
return true;
}
}
使用这些方法,您的代码变得更加简单:
if (sheet.IsCellNullOrEmpty(a, b))
{
Console.WriteLine("Cell at row " + a + " column " + b + " is empty.");
}