2015-06-16 2 views
0

Я хочу, чтобы извлечь данные из Excel в MySQL, но в начале я хочу только, чтобы прочитать файл, чтобы я использовать код ниже:Извлечение данных из Excel в MySQL в Java

@RestController 
public class ExtractDataController { 

    protected String[] celluls; 

    @RequestMapping(value = "/readExcel", method = RequestMethod.GET) 
    public String processExcel()   
    { 

     try { 

      InputStream ExcelFileToRead = new FileInputStream("Test.xlsx"); 
      //définir l'objet workbook 
      XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead); 
      //Itérer sur le nombre de sheets 
      for(int i=0;i<wb.getNumberOfSheets();i++) 
      { 
      XSSFSheet sheet = wb.getSheetAt(i); 
      //Itérer sur les lignes 
      for(int k=0;k<sheet.getLastRowNum();k++) 
      { 
      XSSFRow ligne = sheet.getRow(k); 
      celluls = new String[ligne.getLastCellNum()]; 
      for(int j=0;j<ligne.getLastCellNum();j++){ 
       if(ligne.getCell(j).getCellType() == 0) 

        celluls[j] = ""+ligne.getCell(j).getNumericCellValue(); 
       else if(ligne.getCell(j).getStringCellValue().equals("/0")) 
        celluls[j] = ""+0; 
       else if(!ligne.getCell(j).getStringCellValue().equals("NIL") && !ligne.getCell(j).getStringCellValue().equals("NULL") && !ligne.getCell(j).getStringCellValue().equals("/0")) 
        {celluls[j] = ligne.getCell(j).getStringCellValue(); 
        System.out.println(celluls[j]); 
        } 
       else celluls[j] = null; 
       System.out.println(celluls[j]); 
      } 

      } 

     }} catch (Exception e) { 
      System.err.println("Erreur"); 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return "data extracted successfully"; 
    }} 

Теперь файл Test .xsls имеет всего 2 строки и 1 лист, чтобы проверить код, но когда я запускаю приложение, у меня первая строка дублируется, и она не читает второй.

Вот данные моего файла

Country cc ndc RS 
France 36 123 roaming international 
Maroc 12 145 roaming international 

И вот что я получаю

Country 
Country 
cc 
cc 
ndc 
ndc 
RS 
RS 
France 
France 
36.0 
123.0 
roaming international 
roaming international 
Country 
Country 
cc 
cc 
ndc 
ndc 
RS 
RS 
France 
France 
36.0 
123.0 
roaming international 
roaming international 

Любые идеи, пожалуйста?

+0

Да, вы правы, жаль, что я не обратил внимания –

+0

Зачем это делать на Java и почему все с нуля? Существует [Excel версия Mysql] (http://www.mysql.de/why-mysql/windows/excel/), или вы можете подключиться к MySQL с помощью ODBC. – Stefan

+0

Вы получаете повторяющиеся значения, потому что у вас есть два 'System.out.println'? – m4ktub

ответ

1

Я предполагаю, что это использование < sheet.getLastRowNum() для первого for цикла:

getLastRowNum() --> last row contained n this sheet (0-based) 

(см https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html#getLastRowNum())

Следовательно, это не количество строк, но индекс последней строки!

Итак, если у вас есть 2 строки, это вернет 1, так как это последняя строка, содержащая данные. Следовательно, ваш for-loop должен подняться до <= sheet.getLastRowNum()

+0

Да, спасибо, что он работает сейчас: D –

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