使用poi从excel中检索值

时间:2014-12-24 14:51:37

标签: java apache-poi

我正在尝试使用poi方法获取excel中特定行的列值。

我能够获取值,但问题是我只想从第二列获取值。

public static ArrayList<String> GetBusinessComponentList() throws IOException{


        String Tcname = "TC02_AggregateAutoByPassRO_CT";
        ArrayList<String> arrayListBusinessFlow ;   
        arrayListBusinessFlow = new ArrayList<String>();
        FileInputStream fileInput = new FileInputStream(oFile);
        wb = new HSSFWorkbook(fileInput);
        sheet = wb.getSheet("Business Flow");

        int rownr = findRow(sheet, Tcname);
            row = sheet.getRow(rownr);  
                                          for (Cell cell : row) {
                                        String arr = cell.getStringCellValue();                  
                      arrayListBusinessFlow.add(arr);         
                    }                               
                  return arrayListBusinessFlow;
        }
    private static int findRow(HSSFSheet sheet, String cellContent){              

        for (Row row : sheet) {
            for (Cell cell : row) {
                if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
                    if (cell.getRichStringCellValue().getString().trim().equals(cellContent)) {
                        return row.getRowNum();  
                    }
                }
            }
        }               
        return 0;
    }

}

输出:

[TC02_AggregateAutoByPassRO_CT, 
StrategicUINewBusiness.Login, 
StrategicUINewBusiness.CustomerSearch, 
StrategicUINewBusiness.NamedInsured, 
StrategicUINewBusiness.InsuranceScoreByPass, 
StrategicUINewBusiness.VehiclePage, 
StrategicUINewBusiness.DriverPage, 
StrategicUINewBusiness.ViolationPage, 
StrategicUINewBusiness.UnderwritingPage, 
StrategicUINewBusiness.CoveragePage, 
StrategicUINewBusiness.Portfolio, 
StrategicUINewBusiness.BillingPage, 
StrategicUINewBusiness.FinalSalePage, 
StrategicUINewBusiness.PolicyConfirmation, , , ]

但是当我到达时,我不想要我的测试用例名称。

请帮我改变一下我需要做的改变。谢谢!

2 个答案:

答案 0 :(得分:0)

使用Cell cell=row.getCell(1);,您还可以使用sheet.getLastRowNum()获取工作表上最后一行的数字。

for (int i=0;i<=row.getLastCellNum();i++) {
      if (i!=1){
        //your stuff
     }
}

答案 1 :(得分:0)

目前,您用于迭代单元格的代码仅返回包含内容或样式的单元格,并跳过完全空的单元格。您需要更改为迭代单元格的其他方法之一,因此您可以控制它从第二列开始读取。

如果您查看Apache POI Documentation on iterating over rows and cells,您会看到有关迭代的两种主要方式的详细信息。

对于您的情况,您需要以下内容:

// We want to read from the 2nd column onwards, zero based
int firstColumn = 1;

// Always fetch at least 4 columns
int MY_MINIMUM_COLUMN_COUNT = 5;
// Work out the last column to go to
int lastColumn = Math.max(r.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT);

// To format cells into strings
DataFormatter df = new DataFormatter();

// Iterate over the cells
for (int cn = firstColumn; cn < lastColumn; cn++) {
    Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
    if (c == null) {
        // The spreadsheet is empty in this cell
    } else {
        // Do something useful with the cell's contents

        // eg get the cells value as a string
        String cellAsString = df.formatCellValue(c);
    }
}