在Apache POI中跳过空白Excel单元格

时间:2012-05-01 22:59:12

标签: java apache-poi

我是Apache POI的新手,但我想做的是通过Excel文件(.xls)读取并将其放入ArrayList进行存储,以便稍后进行操作。我可以得到整张纸,但我的问题就在于:我得到整张纸(约54183行)。

我想跳过空白的单元格,类型为3.由于某种原因,当我在system.out.print中找到ArrayList时,它会包含所有空白单元格。

有没有办法跳过这些并且不将它们添加到我正在尝试创建的ArrayList中?

我有以下代码:

public ArrayList readExcelFile(String filePath) throws IOException {
    ArrayList cellVectorHolder = new ArrayList();
    try {
        FileInputStream inputFile = new FileInputStream(filePath);
        POIFSFileSystem myFileSystem = new POIFSFileSystem(inputFile);
        HSSFWorkbook wkbk = new HSSFWorkbook(myFileSystem);
        wb = wkbk;
        for (int i = 0; i < wb.getNumberOfSheets(); i++) {
            HSSFSheet wkSheet = wkbk.getSheetAt(i);
            for (Row row : wkSheet) {
                ArrayList cellVector = new ArrayList();
                for (Cell cell : row) {
                    if(cell.getCellType() != 3){
                        cellVector.add(cell);
                    }
                }
                cellVectorHolder.add(cellVector);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return cellVectorHolder;
}

不介意ArrayList名称......我一直在使用向量,直到我终于发现它们自1.2以来已经被折旧了。

4 个答案:

答案 0 :(得分:4)

在将单元格添加到List之前,您可以检查单元格值。类似的东西:

if (cell.getStringCellValue() != null &&  cell.getStringCellValue().length() != 0) {   
    cellVector.add(cell); 
}

如果有某些内容,则只添加单元格。

答案 1 :(得分:1)

我认为你应该迭代行和单元格,这样POI甚至不会给你空单元格。

签出HSSFSheet.iterator(),它遍历工作表中的所有行。 然后Row.cellIterator()迭代该行中的单元格。

你基本完成了。

如果您打算保留旧的结果变量,则两个内部循环变为:

for (Iterator<Row> rit = wkSheet.iterator();rit.hasNext();) {
    ArrayList cellVector = new ArrayList();
    for(Iterator<Cell> cit = rit.next().cellIterator(); cit.hasNext(); ) { 
            cellVector.add(cit.next());
    }
    cellVectorHolder.add(cellVector);
}

答案 2 :(得分:0)

试试这个

List cellDataList = new ArrayList
HSSFWorkbook workBook = new HSSFWorkbook(fsFileSystem);
                            HSSFSheet hssfSheet = workBook.getSheetAt(0);
                            Iterator rowIterator = hssfSheet.rowIterator();

                            int lineNumber = 0;
                            while (rowIterator.hasNext())
                            {
                                HSSFRow hssfRow = (HSSFRow) rowIterator.next();

                                lineNumber++;
                                if(lineNumber==1){continue;}



                                Iterator iterator = hssfRow.cellIterator();
                                List cellTempList = new ArrayList();
                                int current = 0, next = 1;
                                while (iterator.hasNext())
                                {
                                    HSSFCell hssfCell = (HSSFCell) iterator.next();

                                    current = hssfCell.getColumnIndex();


                                    if(current<next){                                   


                                    }
                                    else{

                                        int loop = current-next;

                                        for(int k=0;k<loop+1;k++){


                                            cellTempList.add(null);
                                            next = next + 1;
                                        }
                                    }

                                    cellTempList.add(hssfCell);



                                    next = next + 1;



                                }
                                cellDataList.add(cellTempList);
                            }

答案 3 :(得分:0)

Try the following code with excel as 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class excelDataReader {
public static void main(String[] args) {
    List<Info> infoList = extractInfo();
    for (Info info : infoList) {
        System.out.println(info);
    }
}
public static List<Info> extractInfo() {
    List<Info> infoList = new ArrayList<Info>();
    Workbook wb = null;
    try {
        wb = new XSSFWorkbook(new FileInputStream(new         
 File("C:\\Users\\rrr\\Downloads\\contacts.xlsx")));
        Sheet sheet = wb.getSheetAt(0);
        boolean skipHeader = true;
        for (Row row : sheet) {
            if (skipHeader) {
                skipHeader = false;
                continue;
            }
            List<Cell> cells = new ArrayList<Cell>();
            int lastColumn = Math.max(row.getLastCellNum(), 5);// because my
                                                                // excel
                                                                // sheet has
                                                                // max 5
                                                                // columns,
                                                                // in case
                                                                // last
                                                                // column is
                                                                // empty
                                                                // then
                                                                // row.getLastCellNum()
                                                                // will
                                                                // return 4
            for (int cn = 0; cn < lastColumn; cn++) {
                Cell c = row.getCell(cn, Row.RETURN_BLANK_AS_NULL);
                cells.add(c);
            }
            Info info = extractInfoFromCell(cells);
            infoList.add(info);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (wb != null) {
            try {
                wb.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return infoList;
}
private static Info extractInfoFromCell(List<Cell> cells) {
    Info info = new Info();
    Cell nameCell = cells.get(0);
    if (nameCell != null) {
        nameCell.setCellType(Cell.CELL_TYPE_STRING);
        info.setName(nameCell.getStringCellValue());
    }
    Cell mobileCell = cells.get(1);
    if (mobileCell != null) {
        mobileCell.setCellType(Cell.CELL_TYPE_STRING);
        info.setMobile(mobileCell.getStringCellValue());
    }
    Cell phoneCell = cells.get(2);
    if (phoneCell != null) {
        phoneCell.setCellType(Cell.CELL_TYPE_STRING);
        info.setPhone(phoneCell.getStringCellValue());
    }
    Cell permAddressCell = cells.get(3);
    if (permAddressCell != null) {
        permAddressCell.setCellType(Cell.CELL_TYPE_STRING);
        info.setPermAddress(permAddressCell.getStringCellValue());
    }
    Cell commAddressCell = cells.get(4);
    if (commAddressCell != null) {
        commAddressCell.setCellType(Cell.CELL_TYPE_STRING);
        info.setCommAddress(commAddressCell.getStringCellValue());
    }
    return info;
}

}     软件包cmprocesser.cmprocesser;

import java.io.File; 
import java.io.FileInputStream;  
import java.io.IOException;  
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Comment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class Info {
    private String name;
    private String mobile;
    private String phone;
    private String permAddress;
    private String commAddress;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getPermAddress() {
        return permAddress;
    }
    public void setPermAddress(String permAddress) {
        this.permAddress = permAddress;
    }
    public String getCommAddress() {
        return commAddress;
    }
    public void setCommAddress(String commAddress) {
        this.commAddress = commAddress;
    }
    @Override
    public String toString() {
        return "Info [Name=" + name + ", Mobile=" + mobile + ", Phone=" + phone + ", Permanent Address=" + permAddress
                + ", Communication Address=" + commAddress + "]";
    }
}