Die Werkzeugklasse, die Excel -Daten importiert, hat nur wenige Codezeilen aufzurufen, was sehr einfach ist.
Die Codekopie lautet wie folgt:
import Jxl.cell;
Jxl.sheet importieren;
Jxl.workbook importieren;
import Jxl.read.biff.BiffException;
import org.apache.commons.beanutils.BeanUtils;
import org.slf4j.logger;
import org.slf4j.loggerfactory;
importieren java.io.ioException;
importieren java.io.inputstream;
import Java.util.*;
/**
* Excel importierte Werkzeugklasse.
*/
öffentliche Klasse Excelutils {
private statische endgültige Logger logger = loggerfactory.getLogger (excelutils.class);
//Erfolg
public static Final Integer status_ok = Integer.Valueof (1);
//scheitern
public static Final Integer status_no = Integer.Valueof (0);
/**
*Privatisierungskonstruktor
*/
private excelutils () {
}
/**
* Holen Sie das Datenobjekt in der Excel -Datei
*
* @param ist excel
* @param excelcolumnnamen den englischen Namen jedes Feldes in Excel (es sollte dem Feldnamen des Pojo -Objekts übereinstimmen, und die Reihenfolge ist die gleiche wie die von Excel)
* @Return Excel Jede Zeile ist eine Datensatzliste, und die Karte ist der entsprechende "Feldname-> Wert".
* @throws Ausnahme
*/
öffentliche statische Liste <map <String, String >> getImportData (InputStream ist, list <string> excelcolumnnames) Ausnahme {
logger.debug ("inputStream: {}", ist);
if (ist == null) {
return collections.EmptyList ();
}
Arbeitsbuch Workbook = null;
versuchen {
// Excel bekommen
workbook = workbook.getworkbook (ist);
} catch (biffexception e) {
logger.Error (e.getMessage (), e);
return collectionss.emppty_list;
} catch (ioException e) {
logger.Error (e.getMessage (), e);
return collectionss.emppty_list;
}
logger.debug ("Arbeitsbuch: {}", Arbeitsbuch);
if (workbook == null) {
return collections.EmptyList ();
}
// das erste Blatt
Blatt Blatt = Workbook.getsheet (0);
// Zeilennummer
int rowCounts = Sheet.getRows () - 1;
logger.debug ("rowCounts: {}", rowCounts);
Liste <map <String, String >> list = new ArrayList <map <String, String >> (rowCounts - 1);
// doppelt für die Schleife zum Abrufen von Daten
für (int i = 1; i <rowCounts; i ++) {
Map <string, string> params = new HashMap <String, String> ();
// I, JI: Zeile J: Spalte
für (int j = 0; j <excelcolumnnames.size (); j ++) {
Cell Cell = Sheet.getCell (j, i);
params.put (excelcolumnnames.get (j), cell.getContents ());
}
list.add (params);
}
Rückgabeliste;
}
/**
* Erhalten Sie die Liste der importierten Daten als Objekt
*
* @param Daten
* @param clazz
* @param excelcolumnnames
* @Param Checkexcel
* @param <t>
* @zurückkehren
* @throws Ausnahme
*/
public static <t> list <t> makedata (list <map <String, String >> Daten, Klasse <T> Clazz, Liste <string> excelcolumnnames, scheckkexcel checkExcel) löst Ausnahme {aus {
if (data == null || data.isempty () || clazz == NULL || upkexcel == null) {
return collectionss.emppty_list;
}
List <T> result = new ArrayList <T> (data.size ());
für (map <string, string> d: data) {
if (scheckkexcel!
weitermachen;
}
T Entity = clazz.newinstance ();
für (String -Spalte: ExcelColumnNames) {
Beanutils.SetProperty (Entity, Spalte, D.Get (Spalte));
}
result.add (Entity);
}
Rückgabeergebnis;
}
}
Überprüfen Sie, ob die Daten in jeder Zeile in Excel legal sind
Die Codekopie lautet wie folgt:
import Java.util.map;
/**
* Überprüfen Sie, ob die Daten in jeder Zeile in Excel legal sind
*/
public interface ponkexcel {
/**
* Return True ist legal
*
* @param -Datendaten für jede Zeile in Excel
* @zurückkehren
*/
public boolean check (map <string, string> data);
}
Teil anrufen
Die Codekopie lautet wie folgt:
Liste <map <string, string >> data = excelutils.getimportData (IS, Constants.excel_column_names);
Liste <FeeAllocation> Allocations = excelutils.makedata (Data, feeAllocation.class, constants.excel_column_names, new Checkexcel () {
public boolean check (map <string, string> data) {
if (stringutils.isempty (data.get ("name"))))
false zurückgeben;
zurückkehren;
}
});