使用Java获取Excel信息

时间:2013-08-26 18:01:31

标签: java excel apache-poi

我在这里需要一些帮助,因为我被困住了......

背景是这样......

我正在制作一个flex应用程序,其中一项服务就是读取一个excel文件并将其放入数据库......

我知道如何检索信息,但有一些细节让我陷入困境......

这里有:

  1. 一些excel文件可能有1600或更多行但只有100或200有数据...但我想知道是否有像cell.getlastrow函数但是因为System.out.println(sheet.getLastRowNum());显然给了我1600或者它是什么,但是在我的插入验证中并没有给我最后一行数据我在我的条件下做了&& (cell.getStringCellValue() != null)但是没有工作......我想停在最后一行,因为如果没有那么我的代码继续阅读,它花了很多时间,它应该不做,并插入一些我不想要的东西。 :(
  2. 另外,有些字段就像这个“7”,“0”我的意思是数字但是如果我把它们作为getStringCellValue,它就不会把它们放进去!如果我将它们作为getNumericCellValue放置它,但是它们会像“7.0”那样放置它们,我怎么能把它作为String?我希望它们为String,因为在我的数据库中我需要它们像整数而不是浮点数或双打
  3. 另一个问题,excel文件可能是xls或xlsx我读到它更好地制作Workbook eworkbook = WorkbookFactory.create(Archivo);而不是新的XSSF或HSSF等实例...使用WorkbookFactory,我是否安全是否是xls还是xlsx?
  4. 为了更好地理解,我会把一些代码放在我做的地方......

    SiveCuatro element;
    
        ByteArrayInputStream Archivo = new ByteArrayInputStream( params.byteArray );
    
        DsMgr myDB = new DsMgr();
        Connection con = myDB.getConnection();
    
        if (con != null){
            Statement stmt;
    
            try{
    
                stmt = con.createStatement();
                Workbook eworkbook = WorkbookFactory.create(Archivo);
                Sheet sheet = eworkbook.getSheet("FORMATO SIVE 04");
    
                Iterator<Row> rowIterator = sheet.iterator();
                element = new SiveCuatro(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
                while(rowIterator.hasNext()) {
                    Row row = rowIterator.next();
    
                    Iterator<Cell> cellIterator = row.cellIterator();
                    while(cellIterator.hasNext()) {
    
                        Cell cell = cellIterator.next();
    
    
                        int NumRows = sheet.getPhysicalNumberOfRows();
                        int pasa = NumRows + 1;
    
    
                        switch(cell.getCellType()) {
                        case Cell.CELL_TYPE_STRING:
                            if ( (cell.getColumnIndex() >= 0) && (pasa >= 1 ) ){
                                if(cell.getColumnIndex() == 1){element.setLaboratorio_Id(cell.getStringCellValue());}
                                if(cell.getColumnIndex() == 2){element.setCaso_IdLab(cell.getStringCellValue());}
                                if(cell.getColumnIndex() == 3){element.setEstado_Id(cell.getStringCellValue());}
                                if(cell.getColumnIndex() == 4){element.setMunicipio_Id(cell.getStringCellValue());}
                                if(cell.getColumnIndex() == 5){element.setEnfermedad_Id(cell.getStringCellValue());}
                                if(cell.getColumnIndex() == 6){element.setEspecie_Id(cell.getStringCellValue());}
                                if(cell.getColumnIndex() == 10){element.setTipoMuestra_Id(cell.getStringCellValue());}
                                if(cell.getColumnIndex() == 18)element.setTecnica_Id(cell.getStringCellValue());
                                if(cell.getColumnIndex() == 19)element.setUsuario_Id(cell.getStringCellValue());
                                if(cell.getColumnIndex() == 21)element.setCaso_Fecha(cell.getStringCellValue());
                                if(cell.getColumnIndex() == 22)element.setCaso_Anio(cell.getStringCellValue());
                                if(cell.getColumnIndex() == 29)element.setPropietario(cell.getStringCellValue());
                                if(cell.getColumnIndex() == 30)element.setGranjaPredio(cell.getStringCellValue());
                                if(cell.getColumnIndex() == 31)element.setFuncionZoote(cell.getStringCellValue());
                                if((cell.getStringCellValue() != null)){ break;}
                            }
                            break;
                        case Cell.CELL_TYPE_NUMERIC:
                            if ( (cell.getColumnIndex() >= 0) && (pasa >= 1 )  ){
                                if(cell.getColumnIndex() == 0){element.setCaso_Mes(cell.getNumericCellValue());}
                                if(cell.getColumnIndex() == 7){element.setPobAnimal_Total(cell.getNumericCellValue());}
                                if(cell.getColumnIndex() == 8){element.setPobAnimal_Enfermos(cell.getNumericCellValue());}
                                if(cell.getColumnIndex() == 9){element.setPobAnimal_Muertos(cell.getNumericCellValue());}
                                if(cell.getColumnIndex() == 11){element.setTotal_Muestras(cell.getNumericCellValue());}
                                if(cell.getColumnIndex() == 12){element.setRes_Positivos(cell.getNumericCellValue());}
                                if(cell.getColumnIndex() == 13)element.setRes_Negativos(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 14)element.setRes_Nt(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 15)element.setRes_Sospechoso(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 16)element.setCaso_Obs(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 17)element.setCaso_TipoCepa(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 20)element.setCaso_IPIC(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 23)element.setCaso_Estatus(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 24)element.setCaso_Id(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 25)element.setCuadrante_Id(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 26)element.setLocalidad_Id(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 27)element.setCaso_X(cell.getNumericCellValue());
                                if(cell.getColumnIndex() == 28)element.setCaso_Y(cell.getNumericCellValue());
                        }
                            break;
                        }
    
                    }
    
                    System.out.println(sheet.getLastRowNum());
    

    总结一下......这个代码的第一个版本有我的SiveCuatro类,所有变量都是String,而Cell.CELL_TYPE_STRING只有一个案例,但是没有插入excel中的值就像对于数字,excel文件将始终将单元格设置为“GENERAL”而不是文本,而不是数字,因为GENERAL总是如此。 在这个代码版本中,我在SiveCuatro类中更改了我的构造函数以匹配字段数字,它确实插入但是作为float或double并且我想要它们作为String,它也不会在最后一行停止信息。

    PS。对不起,我的英语不好。请大家帮忙。

2 个答案:

答案 0 :(得分:0)

  1. 您的案例似乎存在一些概念性问题。 空白单元格/行空单元格/行不同。实际上,当您看到具有空白值的工作表看起来都相同时,但是以编程方式,如果您尚未初始化任何单元格/行,则将其视为空,而不是空白。在这种情况下,(cell.getStringCellValue() != null)是不够的。为避免这种情况,您需要使用 MissingCellPolicy 将所有空白单元格转换为空,然后需要检查空值。此外,您还需要检查空行。例如,如果工作表中的行总数为10,则第5行为空。 Null表示不是空白,而是UN初始化的行。在这种情况下,Row row=sheet1.getRow(rowNum);不会显示任何错误,但row.getLastCellNum();可能会显示nullPointerException。要解决此问题,您需要在获取行不应为空的最后一个行号之前进行检查。请检查以下代码

    int lastColumn=0;
    for (int rowNum = 0; rowNum < rowEnd; rowNum++){
        Row row=sheet1.getRow(rowNum);
        //need to check the rows that it should not be null
        if(row!=null)
            lastColumn = row.getLastCellNum();
        else
            continue;
        //check each cell for null or blank 
        for (int cn = 0; cn < lastColumn; cn++){
            Cell cell = row.getCell(cn, Row.RETURN_BLANK_AS_NULL);
            if(cell == null){
                break;
            }
               //Remaining code for non-blank cells
            }
    }
    
  2. 要将单元格值作为字符串获取,您可以使用cell.toString();

  3. 你的问题“不管是新的XSSF或HSSF的实例......还是使用WorkbookFactory,无论是xls还是xlsx,我都会安全吗?” ....是的,这将是安全的。

答案 1 :(得分:0)

嘿,我刚刚想通了 我改变了很多东西......但它看起来像这样......

感谢Sankumarsingh的时间和帮助

int j = 0;
            boolean invalido = false;
            while(rowIterator.hasNext()) {
                invalido = false;
                Row row = rowIterator.next();
                j++;
                if (j == 1)
                    row = rowIterator.next();
                for (int k = 0; k < 32 ; k++){
                    if (row.getCell(k) == null || row.getCell(k).toString().replaceAll("\\s","").isEmpty()){
                        invalido = true;
                        break;
                    }
                }
                if (!invalido){

                    element.setCaso_Mes(row.getCell(0).toString());
                    element.setLaboratorio_Id(row.getCell(1).toString());
                    element.setCaso_IdLab(row.getCell(2).toString());
                    element.setEstado_Id(row.getCell(3).toString());
                    element.setMunicipio_Id(row.getCell(4).toString());
                    element.setEnfermedad_Id(row.getCell(5).toString());
                    element.setEspecie_Id(row.getCell(6).toString());
                    element.setPobAnimal_Total(row.getCell(7).toString());
                    element.setPobAnimal_Enfermos(row.getCell(8).toString());
                    element.setPobAnimal_Muertos(row.getCell(9).toString());
                    element.setTipoMuestra_Id(row.getCell(10).toString());
                    element.setTotal_Muestras(row.getCell(11).toString());
                    element.setRes_Positivos(row.getCell(12).toString());
                    element.setRes_Negativos(row.getCell(13).toString());
                    element.setRes_Nt(row.getCell(14).toString());
                    element.setRes_Sospechoso(row.getCell(15).toString());
                    element.setCaso_Obs(row.getCell(16).toString());
                    element.setCaso_TipoCepa(row.getCell(17).toString());
                    element.setTecnica_Id(row.getCell(18).toString());
                    element.setUsuario_Id(row.getCell(19).toString());
                    element.setCaso_IPIC(row.getCell(20).toString());
                    element.setCaso_Fecha(row.getCell(21).toString());
                    element.setCaso_Anio(row.getCell(22).toString());
                    element.setCaso_Estatus(row.getCell(23).toString());
                    element.setCaso_Id(row.getCell(24).toString());
                    element.setCuadrante_Id(row.getCell(25).toString());
                    element.setLocalidad_Id(row.getCell(26).toString());
                    element.setCaso_X(row.getCell(27).toString());
                    element.setCaso_Y(row.getCell(28).toString());
                    element.setPropietario(row.getCell(29).toString());
                    element.setGranjaPredio(row.getCell(30).toString());
                    element.setFuncionZoote(row.getCell(31).toString());


                    @SuppressWarnings("unused")
                    ResultSet rset = stmt.executeQuery("INSERT INTO " +

希望它有助于某人