我正在使用Poi.jar从excel表输入,想知道如何检查单元格是否为空。
现在我使用下面的代码。
cell = myRow.getCell(3);
if (cell != null) {
cell.setCellType(Cell.CELL_TYPE_STRING);
//System.out.print(cell.getStringCellValue() + "\t\t");
if (cell.getStringCellValue() != "")
depend[p] = Integer.parseInt(cell.getStringCellValue());
}
}
从Apache POI 3.17开始,您必须使用枚举检查单元格是否为空:
import org.apache.poi.ss.usermodel.CellType;
if(cell == null || cell.getCellTypeEnum() == CellType.BLANK) { ... }
Gagravarr的回答很好!
但是如果假设一个单元格包含一个空字符串(“
”),那么就需要一些额外的代码。如果单元格被编辑后未正确清除(有关如何正确清除单元格,请参阅下文),则可能会发生这种情况。
我给自己写了一个助手来检查XSSFCell
是否为空(包括一个空字符串)。
/**
* Checks if the value of a given {@link XSSFCell} is empty.
*
* @param cell
* The {@link XSSFCell}.
* @return {@code true} if the {@link XSSFCell} is empty. {@code false}
* otherwise.
*/
public static boolean isCellEmpty(final XSSFCell cell) {
if (cell == null) { // use row.getCell(x, Row.CREATE_NULL_AS_BLANK) to avoid null cells
return true;
}
if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {
return true;
}
if (cell.getCellType() == Cell.CELL_TYPE_STRING && cell.getStringCellValue().trim().isEmpty()) {
return true;
}
return false;
}
注意更新的POI版本
他们首先将getCellType()
更改为getCellTypeEnum()
作为Version3.15 Beta 3
,然后返回到getCellType()
作为Version4.0
。
>
版本<代码>
CellType。BLANK
和CellType。STRING
代替单元格。CELL_TYPE_BLANK和单元格。CELL_TYPE_STRING
版本<代码>
单元格。getCellTypeEnum()
而不是单元格。getCellType()
但是最好仔细检查你自己,因为他们计划在未来的版本中把它改回来。
这个JUnit测试显示了需要额外的空检查的情况。
场景:在Java程序中更改单元格的内容。随后,在同一个Java程序中,检查单元格是否为空。如果isCellEmpty(XSSFCell cell)
函数未检查空字符串,测试将失败。
@Test
public void testIsCellEmpty_CellHasEmptyString_ReturnTrue() {
// Arrange
XSSFCell cell = new XSSFWorkbook().createSheet().createRow(0).createCell(0);
boolean expectedValue = true;
boolean actualValue;
// Act
cell.setCellValue("foo");
cell.setCellValue("bar");
cell.setCellValue(" ");
actualValue = isCellEmpty(cell);
// Assert
Assert.assertEquals(expectedValue, actualValue);
}
以防有人想知道如何正确清除单元格内容。有两种方法可以将其归档(我推荐方法1)。
// way 1
public static void clearCell(final XSSFCell cell) {
cell.setCellType(Cell.CELL_TYPE_BLANK);
}
// way 2
public static void clearCell(final XSSFCell cell) {
String nullString = null;
cell.setCellValue(nullString);
}
为什么是第一条路?显式比隐式好(谢谢,Python)
方法1:将单元格类型显式设置回空白
方式2:由于将单元格值设置为null
字符串时会产生副作用,因此会将单元格类型隐式设置回blank
。
问候温克勒
如果您使用的是ApachePOI4。x、 你可以通过以下方式实现:
Cell c = row.getCell(3);
if (c == null || c.getCellType() == CellType.Blank) {
// This cell is empty
}
对于较旧的Apache POI 3. x版本,它早于移动到CellType
枚举,它是:
Cell c = row.getCell(3);
if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) {
// This cell is empty
}
不要忘记检查Row
是否为空-如果该行从未使用过任何单元格或样式,该行本身可能为空!
问题内容: 我使用函数 row_values 和 col_values 处理Excel文件: 例如, 我将col_values作为list 。如果我在某个列中遇到一个空单元格该怎么办?例如,单元格(1,1)不为空,单元格(1,2)为空,而单元格(1,3)不为空?如何检测单元格(1,2)为空? 我得到的列表中包含一个空字符串作为一个空单元格的值(对于大多数生成Excel文件的知名程序)是否正确? 问
示例Excel文件我正在使用下面提到的是我使用的代码,但它是不工作的。我的要求是分离出每个测试步骤并存储它。我已经使用“Alt+Enter”在同一个单元格中写入多行。如果用apache POI处理单元格数据时能检测到“Alt+Enter”,我就可以很容易地分离我提到的行。
问题内容: 我试图仅使用jQuery在HTML元素为空的情况下调用函数。 像这样: 问题答案: 编辑: 正如某些人指出的那样,浏览器对空元素的解释可能会有所不同。如果您想忽略不可见的元素(例如空格和换行符)并使实现更加一致,则可以创建一个函数(或仅使用其中的代码)。 您也可以将其放入jQuery插件,但是您知道了。
我正在使用Java Apache POI库。在这里,我想在下面的方法(getExcellContent)中检查给定的单元格是否为空。我如何检查? 如果传递的单元格为空,则我收到致命错误,如果我使用的是getCellType()(“int getType = sheet1.getRow(row).getCell(col).getCellType();”)。我想在使用getCellType之前检查给定
我一直在用POI编写一个代码来将数据输入到Excel表中。首先,我需要遍历一组行,我不确定其中有多少行,可能是10或100行。但我发现末尾有一个空白单元格。在那个空白之后,又有一组行。我不担心第二盘。我需要找到第一盘是否已经结束。 这很让人困惑。现在我有5个用户在我的工作表如下所示。在第5个用户之后有一个空白单元格。我试图打印所有的用户,如果有一个空白停止它。
问题内容: 我只想检查Pandas系列中的单个单元格是否为null,即检查值是否为。 所有其他答案适用于序列和数组,但不适用于单个值。 我已经试过,,。是否只有一个单一值的解决方案? 问题答案: 尝试这个: