迭代Excel电子表格值POI

时间:2014-01-23 06:06:13

标签: java excel apache-poi

我有一个Java程序需要读取包含数据的特定范围的excel文件,例如从C6到I6。总行数会有所不同。 之后,我想将这些数据保存到一个对象中,最终保存到一个列表中。 下面是一个示例(数据从第6行开始。在这种情况下,最后一行数据在第10行结束):

          ---------------------------------------------------------------------
          | C      | D       | E       | F       | G       | H       | I      |       
          ---------------------------------------------------------------------
(row 6)   |  001   |10102011 | 874837  | Y       | Y       | TEST001 | No     |
          ---------------------------------------------------------------------
(row 7)   |  002   |11102011 | 8743834 | Y       | Y       |         | No     |
          ---------------------------------------------------------------------
(row 8)   |  003   |15102011 | 609348  | N       | Y       |         | No     |    
          ---------------------------------------------------------------------
(row 9)   |  004   |20102011 | 111117  | N       | Y       |         | No     |
          ---------------------------------------------------------------------
(row 10)  |  005   |30102011 | 837437  | Y       | Y       |         | No     |
          ---------------------------------------------------------------------

如何基于Java中的excel特定范围进行迭代?我在Apache POI中看到了这个CellReference,但不知道我应该如何使用它。我们假设路径等已声明为

(更新:通过使用StringBuffer,我找到了一种可以保存所有数据行的方法)

public void prepareExcel(InputStream excel){
    Workbook wb = WorkbookFactory.create(excel);            
    Sheet sheet = wb.getSheetAt(0);
    StringBuffer sb = new StringBuffer();
    for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
        Row r = sheet.getRow(rowNum);

        for (int cn = 5; cn < 23; cn++) {
            Cell c = r.getCell(cn);
            sb.append(c);
         }
    }   
}

接下来的问题是,如何将此StringBuffer更改为保存到对象,然后更改为ArrayList? 或者有更好的方法吗?

假设行H可以为空。

对象在这里并不是那么重要,我们可以假设:

public class SaveObject{
    private String rowC; 
    private String rowD;
private String rowE;
private String rowF;
private String rowG;
private String rowH;
private String rowI;
public String getRowC() {
    return rowC;
}
public void setRowC(String rowC) {
    this.rowC = rowC;
}
public String getRowD() {
    return rowD;
}
public void setRowD(String rowD) {
    this.rowD = rowD;
}
public String getRowE() {
    return rowE;
}
public void setRowE(String rowE) {
    this.rowE = rowE;
}
public String getRowF() {
    return rowF;
}
public void setRowF(String rowF) {
    this.rowF = rowF;
}
public String getRowG() {
    return rowG;
}
public void setRowG(String rowG) {
    this.rowG = rowG;
}
public String getRowH() {
    return rowH;
}
public void setRowH(String rowH) {
    this.rowH = rowH;
}
public String getRowI() {
    return rowI;
}
public void setRowI(String rowI) {
    this.rowI = rowI;
}
}

0 个答案:

没有答案