4

私はApachePOIを初めて使用しますが、Excelファイル(.xls)を読み取り、それをArrayListに入れて保存し、後で操作できるようにします。シート全体を取得できますが、問題はそれだけです。ダンシート全体(〜54183行)を取得します。

タイプ3の空白のセルをスキップしたいのですが、何らかの理由で、ArrayListをsystem.out.printすると、そこにすべての空白のセルが含まれます。

それらをスキップして、作成しようとしている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以降に減価償却されていることがようやくわかるまで、Vectorsを使用していました。

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()、その行のセルを繰り返し処理します。

そして、あなたは基本的に完了です。

古い結果変数を保持することに専念している場合、2つの内部ループは次のようになります。

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 に答える