我在这里需要一些帮助,因为我被困住了......
嗯,背景是这样的……
我正在制作一个 flex 应用程序,其中一项服务是读取一个 excel 文件并将其放入数据库中......
我确实知道如何检索信息,但有一些细节让我陷入困境......
这里有:
- 一些 excel 文件可能有 1600 行或更多行,但只有 100 或 200 行有数据......但我想知道是否有像 cell.getlastrow 函数但有数据,因为
System.out.println(sheet.getLastRowNum());
显然给了我 1600 或其他任何东西,但没有给出我的最后一行数据也在我的插入验证中我&& (cell.getStringCellValue() != null)
在我的情况下做了但没有工作......我想停在最后一行因为如果不是那么我的代码会继续阅读并且需要很多时间它不应该做并插入我不想做的事情。:( - 另外,有些字段是这样的“7”,“0”我的意思是数字但是如果我把它们作为getStringCellValue,它不会把它们!如果我将它们作为 getNumericCellValue 放置它们,但就像“7.0”之类的东西,我怎样才能将它作为字符串?我希望它们作为字符串,因为在我的数据库中我需要它们,比如整数而不是浮点数或双精度数
- 还有一个问题,excel文件可能是xls或xlsx,我读到它比
Workbook eworkbook = WorkbookFactory.create(Archivo);
新的XSSF或HSSF等实例更好......使用WorkbookFactory,无论是xls还是xlsx,我都会安全吗?
为了更好地理解,我将把一些代码放在我这样做的地方......
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 类,所有变量都是字符串,只有一个案例在 Cell.CELL_TYPE_STRING,但不插入在 excel 中类似于数字的值, excel文件将始终将单元格作为“通用”而不是文本,而不是数字,就像通用一样。在这个代码版本中,我更改了我的 SiveCuatro 类中的构造函数以匹配数字字段,它确实插入但作为浮点数或双精度数,我希望它们作为字符串,它也不会在最后一行停止信息。
PS。对不起,我的英语不好。请大家帮忙。