在java中将数据从excel提取到mysql

时间:2015-06-16 11:01:52

标签: java spring-boot

我想从excel中提取数据到mysql,但一开始我只想读取文件,所以我使用下面的代码:

@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张表来测试代码,但是当我运行应用程序时,我的第一行是重复的,而且它没有读取seconde。

这是我的文件数据

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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循环必须达到<= sheet.getLastRowNum()