我在excel文档中有3列数据。 例如,在中间列上,有一些没有数据的空格。
我已经按行按排序方式创建了一个对象来检索数据。
我遇到的问题是我无法将空单元格存储为空,在我的对象中,并且我在这个问题上丢失了数据。 就像在下面的示例中一样,我只从每列中写入内容的行中获取数据。如果一列为空,则不返回任何内容。
我以通用方式获取单元格值:
public static Object getCellValue(Cell cell)
{
Object cellValue = null;
if(cell.getCellTypeEnum() == CellType.STRING){
cellValue = cell.getStringCellValue();
}else if(cell.getCellTypeEnum() == CellType.NUMERIC){
cellValue = cell.getNumericCellValue();
}else if(cell.getCellTypeEnum() == CellType.BOOLEAN){
cellValue = cell.getBooleanCellValue();
}else if(cell.getCellTypeEnum() == CellType.BLANK){
cellValue = "";
}
return cellValue;
}
创建单元格对象。例如,对输出进行排序非常重要:第1列第1行必须严格分配到同一行的第2列和第3列。即使单元格为空/空,我必须按顺序保留它们,在数据矩阵内。
public class ColumnsOrder {
private String fristColumn;
private String secondColumn;
private String thirdColumn;
public ColumnsOrder() {
}
public ColumnsOrder(String fristColumn) {
super();
this.fristColumn = fristColumn;
}
public ColumnsOrder(String fristColumn, String secondColumn) {
super();
this.fristColumn = fristColumn;
this.secondColumn = secondColumn;
}
public ColumnsOrder(String fristColumn, String secondColumn,
String thirdColumn) {
super();
this.fristColumn = fristColumn;
this.secondColumn = secondColumn;
this.thirdColumn = thirdColumn;
}
public String getFristColumn() {
return fristColumn;
}
public String getSecondColumn() {
return secondColumn;
}
public String getThirdColumn() {
return thirdColumn;
}
}
我在这里从xlsx中取出数据,可能在这里我做错了。
for( rowIndex = rowStart; rowIndex <= rowEnd; rowIndex++ ) {
Cell cellOne = null;
Cell cellTwo = null;
Cell cellThree = null;
row = sheet.getRow( rowIndex );
if (row != null ) {
// getting data from each column
cellOne = (Cell) (( !CheckIfCellIsEmpty.isCellEmpty( row.getCell(0) ) ) ? row.getCell(0) : "" );
cellTwo = (Cell) (( !CheckIfCellIsEmpty.isCellEmpty( row.getCell(1) ) ) ? row.getCell(1) : " ");
cellThree = (Cell) (( !CheckIfCellIsEmpty.isCellEmpty( row.getCell(2) ) ) ? row.getCell(2) : " ");
// Creating the object using its constructor
columnsExcelTemp.add( new ColumnsOrder(
(String)GetCellValue.getCellValue(cellOne),
(String)GetCellValue.getCellValue(cellTwo),
(String)GetCellValue.getCellValue(cellThree)
)
);
}
workbook.close();
}
检查isEmpty函数是否
public static boolean isCellEmpty(final Cell cell)
{
if (cell == null )
{
return true;
}
/*
if ( cell.getCellTypeEnum() == CellType.BLANK ) {
return false;
}
if (cell.getCellTypeEnum() == CellType.STRING)
{
return false;
}
if( cell.getStringCellValue().isEmpty() )
{
return false;
}
*/
return false;
}
答案 0 :(得分:1)
问题是,您在Excel工作表中看到的空单元格可以是具有类似值的单元格,也可能不存在于Excel中。如果你使用row.getCell(),总是检查它是否为null!
答案 1 :(得分:0)
似乎我已经用Apache POI库中的内置函数解决了这个问题。
cellOne = row.getCell( 0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK );
cellTwo = row.getCell( 1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK );
cellThree = row.getCell( 2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK );
Row.MissingCellPolicy.CREATE_NULL_AS_BLANK 作为第二个参数添加,为表格中的空单元格提供BLANK值,从而解决了实际问题。
如果有人需要Java帮助--Apache POI,请在此处给我发表评论。