2013-04-02 4 views
5

Я создал этот код, чтобы прочитать содержимое файлов excel с помощью Apache POI. Я использую eclipse как редактор, но когда я запускал код, у меня была проблема в строке, выделенной жирным шрифтом. В чем проблема? Содержание первенствует является следующее:читать файл excel с помощью Apache POI

Emp ID Name Salary 

1.0 john 2000000.0 

2.0 dean 4200000.0 

3.0 sam  2800000.0 

4.0 cass 600000.0 

import java.io.*; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.poifs.filesystem.POIFSFileSystem; 



public class ExcelRead { 

public static void main(String[] args) throws Exception { 
    File excel = new File ("C:\\Users\\Efi\\Documents\\test.xls"); 
    FileInputStream fis = new FileInputStream(excel); 

    HSSFWorkbook wb = new HSSFWorkbook(fis); 
    HSSFSheet ws = wb.getSheet("Input"); 

    int rowNum = ws.getLastRowNum()+1; 
    int colNum = ws.getRow(0).getLastCellNum(); 
    String[][] data = new String[rowNum][colNum]; 


    for (int i=0; i<rowNum; i++){ 
     HSSFRow row = ws.getRow(i); 
      for (int j=0; j<colNum; j++){ 
       HSSFCell cell = row.getCell(j); 
       String value = cellToString(cell); 
       data[i][j] = value; 
       System.out.println("The value is" + value); 

      } 
     } 
    } 

public static String cellToString (HSSFCell cell){ 

int type; 
Object result; 
type = cell.getCellType(); 

    switch(type) { 


    case 0://numeric value in excel 
     result = cell.getNumericCellValue(); 
     break; 
    case 1: //string value in excel 
     result = cell.getStringCellValue(); 
     break; 
    case 2: //boolean value in excel 
     result = cell.getBooleanCellValue(); 
     break; 
    default: 
     ***throw new RunTimeException("There are not support for this type of    
     cell");*** 
     } 

return result.toString(); 
} 

} 
+0

проблема тис здесь: бросить новый RuntimeException ("Есть не поддерживать этот тип ячейки "); – user2235454

+0

где строка u выделена жирным шрифтом? «Throw new Exception ...» ?, функция cellToString должна поймать исключение, которое вы бросаете или добавляет «исключение бросков» за собой. – user2235520

ответ

0

Вы должны изменить это RuntimeException с информацией о том, что тип не поддерживается с переключателем заявления. Тогда вы сможете добавить поддержку для него, поэтому никакое исключение не будет выбрано.

Так, чтобы увидеть картину того, что ваша программа делает вместо

throw new RunTimeException("There are not support for this type of cell");

вы должны добавить

throw new RunTimeException("There are not support for type with id ["+type+"] of cell");

Это только, сообщить вам, что вы пропустите , Как справиться с этой ситуацией зависит от вас.

+0

Вы могли бы помочь мне с кодом, который я должен добавить? – user2235454

+0

@ пользователь2235454, см. Редактирование. Удачи ! –

3

Есть additional cell types кроме тех, которые вы захватываете в своем заявлении switch. У вас есть случаи для 0 (CELL_TYPE_NUMERIC), 1 (CELL_TYPE_STRING), и 2, но 2 - CELL_TYPE_FORMULA. Вот дополнительные возможные значения:

  • 3: CELL_TYPE_BLANK
  • 4: CELL_TYPE_BOOLEAN
  • 5: CELL_TYPE_ERROR

Используйте Cell константы для типа клеток в вашем переключателя заявление вместо целочисленных литералов , и использовать все 6 из них для захвата всех возможных случаев.

И как уже было предложено @Vash, укажите фактическую ячейку type в своем сообщении RuntimeException.

2

Отметьте this library, что я создал для чтения файлов XLSX, XLS и CSV, легко используя lambdas с Java8, в котором используется Apache POI внутри.

Вот пример:

RowConverter<Country> converter = (row) -> new Country(row[0], row[1]); 

ExcelReader<Country> reader = ExcelReader.builder(Country.class) 
    .converter(converter) 
    .withHeader() 
    .csvDelimiter(';') 
    .sheets(1) 
    .build(); 

List<Country> list; 
list = reader.read("src/test/resources/CountryCodes.xlsx"); 
list = reader.read("src/test/resources/CountryCodes.xls"); 
list = reader.read("src/test/resources/CountryCodes.csv"); 

со следующими первенствовать и фасолью файлов:

public static class Country { 
    public String shortCode; 
    public String name; 

    public Country(String shortCode, String name) { 
    this.shortCode = shortCode; 
    this.name = name; 
    } 
} 

Excel:

Code Country 
ad Andorra 
ae United Arab Emirates 
af Afghanistan 
ag Antigua and Barbuda 
... 
Смежные вопросы