4

我是 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 的名称……我一直在使用 Vectors,直到我最终发现它们自 1.2 或类似的东西以来就已经贬值了。

4

4 回答 4

5

在将单元格添加到列表之前,您可以检查单元格值。就像是:

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

如果有一些内容,您只添加单元格。

于 2012-05-01T23:26:19.440 回答
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);
}
于 2012-05-01T23:31:54.450 回答
1
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 + "]";
    }
}
于 2019-10-20T19:30:08.043 回答
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);
                            }
于 2012-06-13T06:57:22.900 回答