gpt4 book ai didi

java - 处理 apache poi 中的空列

转载 作者:行者123 更新时间:2023-12-02 07:28:56 27 4
gpt4 key购买 nike

我有一个从 java 程序读取 Excel 工作表的程序。

我正在迭代单元格,如下所示:

Iterator cells = row.cellIterator();
String temp;
StringBuilder sb;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

while (cells.hasNext()) {
Cell cell = (Cell) cells.next();
temp = null;

switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
temp = cell.getRichStringCellValue().getString();
break;

case Cell.CELL_TYPE_NUMERIC:

if (DateUtil.isCellDateFormatted(cell)) {
temp = sdf.format(cell.getDateCellValue());
} else {
temp = df.format(new BigDecimal(cell.getNumericCellValue()));
}
break;
default:
}
if (temp == null || temp.equalsIgnoreCase("null")) {
sb.append("").append(";");
} else {
sb.append(temp).append(";");
}
}

正如所见,我正在尝试创建一个字符串生成器,其中包含以分号分隔的 excel 行中的值。

问题是,如果列值为空,我希望它在字符串生成器中作为空值并带有两个连续的分号。

但是,调用

Cell cell = (Cell) cells.next();

简单地忽略空单元格并跳转到下一个非空单元格。

所以这条线

if (temp == null || temp.equalsIgnoreCase("null"))

从未遇到过。

如何在迭代器中获取空列值的句柄?

最佳答案

这实际上是this question的重复。 ,等等my answer to that question基本上也完全适合你。

单元迭代器仅迭代文件中定义的单元。如果单元格从未在 Excel 中使用过,它可能不会出现在文件中(Excel 并不总是一致...),因此 POI 不会看到它

如果您想确保命中每个单元格,则应该按索引查找,并检查空单元格(表示该单元格在文件中从未存在过),或者设置 MissingCellPolicy控制如何处理空单元格和空白单元格

因此,如果您确实想要获取每个单元格,请执行以下操作:

Row r = sheet.getRow(myRowNum);
int lastColumn = Math.max(r.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT);

for (int cn=0; cn<lastColumn; cn++) {
Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
if (c == null) {
// The spreadsheet is empty in this cell
} else {
// Do something useful with the cell's contents
}
}

关于java - 处理 apache poi 中的空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13171870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com