我的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首先出现的那个范围的起点,请告知如何到达那里然后将内容打印到控制台?
答案 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();
}
}