如何在Excel工作表中查找表格数据

时间:2015-06-06 06:37:04

标签: java apache-poi xls jxl

我的c:驱动器(本地计算机)中有一个名为abc.xls的excel文件,现在在第一张工作表中的excel文件中有一个表,如下所示,

TradeRef   TMS  Deal     Date        B/S
12         45   DRT    23/97/2014    RTY  
23         36   QWE    21/07/2015    WER

现在请告知如何通过java中的apachae poi从excel表中读取此表。

现在的问题是这个表可以在工作表中的任何范围内,例如,它可以从A1单元格开始,也可以从F25开始,换句话说,表格可以在任何范围内表格。我关注的是要达到TradeRef首先出现的那个范围的起点,请告知如何到达那里然后将内容打印到控制台?

2 个答案:

答案 0 :(得分:2)

Mi的第一个建议是同意编写Excel文件的程序(或人)的起始单元格 - 或者至少要求人打开工作表,然后使用正确的参数调用程序,如

# F25 is the starting cell, 120 the number of rows
java trade.App F25 120

否则,您将在工作表的单元格上使用iterating的启发式方法,并将起点视为文本内容为“TradeRef”的第一个单元格(或更复杂的变体,例如检查所有标题你期待)

public Cell findFirstRow(Sheet sheet) {
  for (Row row : sheet) {
    for (Cell cell : row) {
      if (cell.getCellType() == Cell.CELL_TYPE_STRING
          && "TradeRef".equals(cell.getStringCellValue()
      ) {
        int row = cell.getRowIndex() + 1;
        int col = cell.getColumnIndex();
        if (sheet.getRow(row) == null)
          throw new RuntimeException("Row " + row + 1 + " is empty!");
        Cell startOfFirstDataRow = sheet.getRow(row).getCell(col);
        if (startOfFirstDataRow == null) {
          CellReference ref = new CellReference(row, col);
          throw new RuntimeException("Data not found at " + ref.formatAtString());
        }
        return startOfFirstDataRow;
      }
    }
  }
  throw new RuntimeException("TradingRef header cell not found!");
}

答案 1 :(得分:0)

也许这对你有用:

class a {
    public void getEntities(){
         B b = new b();
         List<entity> entities = b.select(c=>c.id==5);
         // more detail
    }
}

class b {
    public List<entity> Select( LambdaExpression expression){
        return _dbSet.where(expression).ToList();
    }
}