行き詰まったので、ここで助けが必要です...
うーん背景はこれか…
私はフレックスアプリケーションを作成しています。これの1つのサービスは、Excelファイルを読み取ってデータベースに入れることです...
情報を取得する方法は知っていますが、行き詰まった詳細がいくつかあります...
ここにあります:
- 一部のExcelファイルには1600行以上の行があるかもしれませんが、データがあるのは100行または200行だけです...しかし、cell.getlastrow関数のようなものがあるかどうかを知りたいのですが、
System.out.println(sheet.getLastRowNum());
明らかに1600またはそれが何であれ、与えられませんでした。私の挿入検証でもデータを含む最後の行私は&& (cell.getStringCellValue() != null)
自分の状態で行いましたが機能しませんでした...そして最後の行で停止したいのは、そうでない場合は私のコードが読み取りを続け、何かの時間がかかるからですやりたくないものを挿入してはいけません。:( - また、一部のフィールドは「 7 」、「 0 」のようなものです。数値を意味しますが、それらを getStringCellValue として配置すると、配置されません! それらをgetNumericCellValueとして配置すると、それらを配置しますが、「7.0」などのように、どうすれば文字列として取得できますか? 私のデータベースでは、フロートやダブルではなく整数のように必要なので、文字列として欲しい
- もう 1 つの質問ですが、Excel ファイルは xls または xlsx である可能性があり
Workbook eworkbook = WorkbookFactory.create(Archivo);
ます。新しい XSSF または HSSF などのインスタンスの代わりに作成する方がよいと読みました。
理解を深めるために、それを行うコードの一部を配置します...
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 に 1 つのケースしかありませんが、Excel で数値のような値を挿入しません。 Excelファイルには、セルが常に「GENERAL」としてテキストではなく、数値ではなく、常にGENERALとして含まれます。そして、このコードバージョンでは、SiveCuatro クラスのコンストラクターを数値フィールドに一致するように変更し、挿入しますが、float または double として挿入し、それらを String として使用したいのですが、情報の最後の行で停止しません。
PS。私の悪い英語でごめんなさい。ここで少し助けてください。