2016-07-27 2 views
1

Я пытаюсь прочитать следующие данные из листа Exceljava.lang.ArrayIndexOutOfBoundsException чтение из файла Excel

Data

С помощью следующего кода

import jxl.Cell; 
import jxl.Sheet; 
import jxl.Workbook; 
import jxl.read.biff.BiffException; 

public String readUsernameFromExcel() { 
     File src = new File("C:/filepath.xls"); 

     try { 

      Workbook wb = Workbook.getWorkbook(src); 
      Sheet sh1 = wb.getSheet(0); 
      Cell a2 = sh1.getCell(0, 2); 
      data1 = a2.getContents().trim(); 


     } catch (BiffException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return data1; 

    } 

Так что, когда я пытаюсь получить ячейка 0,1 Я могу подобрать имя пользователя 1000483 просто отлично. Но когда я пытаюсь читать 0,2, я получаю java.lang.ArrayIndexOutOfBoundsException: 2.

То, что я пытаюсь сделать, это прочитать данные с листа excel, вернуть его как String, а затем передать его для входа в мое приложение. Но, кажется, когда я пытаюсь 0,2 Я иду за пределы ожидаемого. Я попробовал несколько вещей, таких как цикл

for (int rows = 0; rows < sh1.getRows(); rows++) { 
Sheet sh1 = wb.getSheet(0); 
      Cell a2 = sh1.getCell(0, 2); 

} 

Я понимаю, что первый номер столбца и второй строки. Я также понимаю, что код не может видеть прошлое 0,1. Я просто в недоумении, как заставить его видеть остальную часть листа, пробовав другие решения одной и той же проблемы.

+1

вы уверены, что это не первая строка, а затем столбец? – Stultuske

+0

Почему, по вашему мнению, это связано с селеном ??? Какова роль селена здесь? –

+0

Я думаю, что его первый столбец затем ряд из того, что я читал в другом решении по той же проблеме public Cell getCell (int column, int row) – OhAye

ответ

1

sh1.getRows() возвращается 3. Как цикл начинается с 0, sh1.getRows() должен быть декрементируются на 1 (как показано ниже). Ниже цикл работает нормально и возвращает значение правильно.

import java.io.File; 
import java.io.IOException; 

import jxl.Cell; 
import jxl.Sheet; 
import jxl.Workbook; 

public class Excel { 

    public static void main(String[] args) { 
     File src = new File("c:/filepath.xls"); 

     try { 
      String data1; 
      Workbook wb = Workbook.getWorkbook(src); 
      Sheet sh1 = wb.getSheet(0); 


      for (int rows = 1; rows < sh1.getRows(); rows++) { 
       for (int column = 0; column <= sh1.getColumns()-1; column++) { 

        Cell a2 = sh1.getCell(column, rows); 
        data1 = a2.getContents().trim(); 
        System.out.println(data1); 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 



} 

Приведенный выше код работает и получает дату без ошибок

+0

Спасибо за ваш код, к сожалению, все еще дает мне исключение. Однако, когда я меняю его на (строки, 1), он дает мне 1000483. Распечатка строк, когда он терпит неудачу, дает мне 2. – OhAye

+0

И не будет ли это столбец, а затем строка? Изучая метод getCell, он показывает - public Cell getCell (int column, int row); – OhAye

+0

Я изменил цикл для запуска в качестве столбца, затем строки. Но это зависит от того, как нам нужны данные. Я предполагаю, что в вашем случае он должен вернуть имя пользователя и пароль, чтобы он был столбцом, а затем строка – Bhuvanwaitz

0

Я использую те же данные с вами, и я мог бы получить значение 1000484 через мой код.

Вот мой код:

package com.jason.xls; 

import java.io.File; 
import jxl.Cell; 
import jxl.Sheet; 
import jxl.Workbook; 

public class XlsParser { 

    public static void main(String[] args) { 
     final String path = "/home/coder/filepath.xls"; 
     System.out.println(readUserNameFromXls(path)); 
    } 

    public static String readUserNameFromXls(final String path) { 
     File file = new File(path); 
     try { 
      Workbook wb = Workbook.getWorkbook(file); 
      Sheet sheet = wb.getSheet(0); 
      Cell a2 = sheet.getCell(0, 2); 
      return a2.getContents().trim(); 
     } catch (Exception e) { 
      return null; 
     } 
     } 
} 

загрузить jxl.jar из jxl.jar download here

результата Моего кода: Code Result Image

+0

Thats странно, единственные различия, которые я вижу, это ваш метод возвращает null, а мой возвращает строку, но я все равно ожидаю, что ваш код будет жаловаться на исключение outofbounds. Разве что-то отличается от вашего Excel? – OhAye

+0

Также почему вам не нужно ломать исключение Бифф? – OhAye

+0

Я изменяю свой код и перехватываю BiffException и IOException, но также получаю правильный ответ, может быть, мой xls-файл отличается от вашего? – JasonQiang

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