2013-04-25 3 views
2

У меня есть превосходство с 2 строками и 5 столбцами. Теперь я ввел код вручную, чтобы принимать значения из 1-й строки. Как я могу повторить процесс?Как провести итерацию ячейки excel в java

Ниже приведен код для 1-го ряда в формате excel. Начиная со второй строки, я не знаю, как это сделать ... Я хочу повторить одну строку за другой.

Workbook workbook = Workbook.getWorkbook(new File(
           "\\C:\\users\\a-4935\\Desktop\\DataPool_CA.xls")); 
Sheet sheet = workbook.getSheet("Sheet1"); 
System.out.println("Reached to Sheet"); 
Cell a = sheet.getCell(2,1); 
Cell b = sheet.getCell(3,1); 
Cell c = sheet.getCell(4,1); 
Cell d = sheet.getCell(5,1); 
Cell e = sheet.getCell(6,1); 
Cell f = sheet.getCell(7,1); 
Cell g = sheet.getCell(8,1); 
Cell h = sheet.getCell(9,1); 
Cell i = sheet.getCell(10,1); 

String uId    = a.getContents(); 
String deptFromDat  = b.getContents(); 
String deptToDate  = c.getContents(); 
String dept1   = d.getContents(); 
String arrival1   = e.getContents(); 
String eihon1   = f.getContents(); 
String branchCode1  = g.getContents(); 
String userType1  = h.getContents(); 
String sessionId1  = i.getContents(); 

ответ

9

Используйте приведенный ниже код для перебора всех строк в таблице:

Sheet sheet = workbook.getSheet("Sheet1"); 
for (Row row : sheet) { 
    for (Cell cell : row) { 
     //your logic 
    } 
} 

Или, в качестве альтернативы, используйте следующий код:

Sheet sheet = workbook.getSheet("Sheet1"); 
for (int i = 0; i < 2; i++) { 
    Row row = sheet.getRow(i); 
    if(row == null) { 
     //do something with an empty row 
     continue; 
    } 
    for (int j = 0; j < 5; j++) { 
     Cell cell = row.getCell(j); 
     if(cell == null) { 
      //do something with an empty cell 
      continue; 
     } 
     //your logic 
    } 
} 
+0

Для последнего, следует помнить, что GetRow или GetCell может вернуть нуль! Все это [описано в документах Apache POI по итерации по строкам и ячейкам] (http://poi.apache.org/spreadsheet/quick-guide.html#Iterator) – Gagravarr

+0

@Gagravarr Это абсолютно верно, в противном случае следующий вопрос будет быть «Почему у меня есть NPE?». Тем не менее, поскольку файл OP, о котором упоминалось, должен был иметь 2 * 5 ячеек *, заполненных *, я не включил проверки. Но ради будущих читателей стоит их включить. Благодаря! – skuntsel

+0

* Предположительно, у вас есть * и * каждый файл будет иметь * очень редко одно и то же ...! – Gagravarr

0

Вам просто нужно изменить 1 к номер строки и использовать цикл for. На основе вашего кода вы можете сделать следующее, например. Для exmaple:

for(int i=0; i<number; i++) 
{ 

      Cell a = sheet.getCell(2,i); 
      Cell b = sheet.getCell(3,i); 
      Cell c = sheet.getCell(4,i); 
... 

} 

Или еще лучше переместить объявления Cell из за цикл, который является лучшей практикой.

Cell a,b, c...; 

for(int i=0; i<number; i++) 
{ 

      a = sheet.getCell(2,i); 
      b = sheet.getCell(3,i); 
      c = sheet.getCell(4,i); 
... 

} 
+0

не работает. Принимает только первую строку – user2314399

+0

@ user2314399 Вы меняли 1 на i? –

+0

Да все еще не работает – user2314399

0
for (int i = 0; i <= sheet.getLastRowNum(); ++i) { 
     row=(Row) sheet.getRow(i); 
     Iterator<Cell> cells = row.cellIterator(); 
     while (cells.hasNext()) 
     { ..... 

вы можете использовать приведенный выше код для перебора всех строк и всех клеток

Смежные вопросы