Ejemplo: Importar datos relevantes (archivo de Excel) y editar los datos del archivo relevantes.
Configuración del archivo XML
Luego configure el tamaño del archivo que se cargará en el archivo XML Spring
<
Configuración de la interfaz JSP
<Div> <Form ID = "SourceFile" name = "SourceFile" Action = "" Method = "Post" Enctype = "Multipart /Form-Data"> <input type = "Button" value = "add" onClick = "addAirline ()" /> <input style = "margen-marginfo: 20px;" id = "Source_file" name = "SourceFile" type = "file" value = "select file" /> <input style = "margin-left: 20px;" Data-Loading-Text = "No envíe repetidamente" type = "subt" value = "upload" onClick = "uppolicy ()"> <input style = "margin-left: 20px;" type = "Subt" Value = "Descargar plantilla" onClick = "return downloadTemplate ();"> </form> </div>
archivo js
function uppolicy () {document.sourceFile.action = "/login/policy/uploadcsv"; var submitUrl = document.getElementById ("SourceFile"). Attributes ["Acción"]. Valor; $ .AJAX ({type: "post", url: subsitUrl, data: $ ('#sourceFile'). Serialize (), dataType: "json", éxito: function (resultado) {var json = json.parse (resultado); if (json.flag == "0" | | json.flag == ") {alerta (tablejson. }Configuración del controlador
@RequestMapping (value = "/uploadcsv", método = requestmethod.post) @ResponseBody public String uploadCSV (@RequestParam ("fuenteFile") multipartFile SourceFile, httpServletRequest Solicitud, httpServletResponse Respuesta) tira IoException {// determina si el archivo es vacío si (fuente (fuente de fuente) // Obtener el nombre del nombre del archivo Nombre = SourceFile.GetoriginalFileName (); // Determinar aún más si el archivo está vacío (es decir, determine si su tamaño es 0 o si su nombre es nulo) Tamaño largo = fuenteFile.getSize (); if (name == null || (""). Equals (name) && size == 0) return null; // importación por lotes. Parámetros: nombre del archivo, archivo. booleano B = BatchImport (Nombre, SourceFile); JsonObject jsonObject = new JsonObject (); if (b) {jsonObject.put ("bandera", 0); jsonObject.put ("éxito", "¡Excel de importación por lotes con éxito!"); } else {jsonObject.put ("bandera", 1); jsonObject.put ("éxito", "¡Falló de Excel de importación por lotes!"); } return jsonObject.ToString (); }Las capas no son tan detalladas, y el procesamiento se realiza en el controlador
public Boolean BatchImport (nombre de cadena, archivo multipartfile) {boolean b = false; // crear y procesar Excel Excelutils readExcel = new ExcelUtils (); // analizar Excel y obtener una colección de información del cliente. List <OtapolicyModel> cpolicylist = readExcel.getExcelinfo (nombre, archivo); if (cpolicylist! = null) {b = true; } // Agregue información iterativamente (nota: de hecho, puede usar directamente el conjunto de cpolicylist como parámetro aquí, y usar la etiqueta foreach para agregar el archivo de mapeo correspondiente de myBatis para la adición de lotes). Para (otapolicynel cliente: cpolicylist) {PolicyDao.inserTapolicy (cliente); } retorno b; }Clase de herramientas Excelutils.java
Es decir, los métodos llamados por readExcel.getExcelinfo (nombre, archivo); Declaración en el método anterior y otros métodos relacionados
Apache POI proporciona API a los programas Java para leer y escribir Archivos de formato de Microsoft Office. Sin embargo, en primer lugar, tenemos que juzgar la versión de Excel y elegir un libro de trabajo diferente (la versión de 2003 corresponde a HSSFWorkBook, y la versión 2007 y arriba corresponde a XSSFWorkBook). Además, en términos generales, primero copie el archivo cargado por el usuario del cliente en el disco local del servidor, y luego léelo a partir de este archivo de copia, evitando así la pérdida de datos o la corrupción durante la lectura debido a las excepciones de red u otras condiciones del cliente.
paquete com.flight.inter.otaAdapter.commons.util; import com.flight.inter.otaAdapter.model.otapolicymodel; importar org.apache.poi.hssf.usermodel.hssfworkbook; import org.apache.poi.ss.usermodel.cell; import org.apache.poi.ss.usermodel.sheet; importar org.apache.poi.ss.usermodel.workbook; importar org.apache.poi.xssf.usermodel.xssfworkbook; import org.springframework.web.multipart.multipartfile; org.springframework.web.multipart.commons.commonsmultipartfile; import java.io.*; import java.math.bigdecimal; import java.util.arrayList; import java.util.date; import java.util.list;/*** creado por ling.zhang en 2016/12/29. */public class Excelutils {// Número total de filas privadas int totalrows = 0; // Número total de piezas privadas int totalcells = 0; // receptor de mensaje de error String private ErrormSg; // Método de construcción public ExcelUtils () {} // Obtener un número total de filas public int getToTalRows () {return TotalRows;} // Obtener un número total de columnas públicas int getToTalCells () {return TotalCells;} // Obtener mensaje de error public String getErrorInfo () {return Errormsg; } / ** * Verificar el archivo de Excel * @param filepath * @return * / public boolean validateExcel (string filepath) {if (filepath == null || devolver falso; } return verdadero; } /** * Lea el archivo de Excel y obtenga la recopilación de información del cliente * @param * @return * /lista pública <otapolicymodel> getExcelinfo (string fileName, multipartFile mfile) {// Convertir el múltiple filmado cargado por el archivo de resorte a CommonsMultMultfile Type CommonsMultipartfile Cf = (CommonsMultMultMult) MFILE) MFILE) MFILE; // Obtener archivo de ruta de almacenamiento local = nuevo archivo ("d: // fileUpload"); // Crear un directorio (su nombre de ruta se especifica mediante el objeto de archivo actual, incluida cualquier ruta principal requerida.) If (! File.exists ()) file.mkdirs (); // Cree un archivo nuevo archivo de archivo1 = nuevo archivo ("d: // fileUpload" + new Date (). GetTime () + ".xlsx"); // Escriba el archivo cargado en el archivo recién creado Pruebe {cf.getFileItem (). Write (File1); } catch (Exception e) {E.PrintStackTrace (); } // Inicializar la recopilación de la lista de información del cliente <OtapolicyModel> customerList = new ArrayList <OtapolicyModel> (); // Inicializar la secuencia de entrada Entrada InputStream es = NULL; Pruebe {// Verifique si el nombre del archivo está calificado si (! ValidateExcel (FileName)) {return null; } // predeterminado si el archivo es la versión 2003 o la versión 2007 basada en el nombre del archivo boolean isexcel2003 = true; if (wdwutil.isexcel2007 (nombre de archivo)) {isexcel2003 = false; } // Instanciar la transmisión de entrada basada en el archivo recién creado es = nuevo fileinputStream (file1); // Lea la información del cliente basada en el contenido en Excel CustomerList = getExcelinfo (IS, ISEXCEL2003); is.close (); } catch (Exception e) {E.PrintStackTrace (); } finalmente {if (is! = null) {try {is.close (); } catch (ioException e) {is = null; E.PrintStackTrace (); }} return CustomerList; } / *** Lea la información del cliente basada en el contenido en Excel* @param es la transmisión de entrada* @param isexcel2003 es la versión de Excel 2003 o 2007* @return* @throws ioexception* / public list <Otapolicymodel> getExcelinfo (inputStream es boolean isExcel2003) {List <oTapolicyel> CustomerList = nlelle; Pruebe { / ** Seleccione la forma de crear un libro de trabajo de acuerdo con la versión* / Workbook wb = null; // Cuando Excel es 2003 if (isexcel2003) {wb = new HSSFWorkBook (is); } else {// Cuando Excel es 2007 wb = new xssfworkbook (is); } // Lea la información del cliente en Excel CustomerList = ReadExcelValue (WB); } catch (ioException e) {E.PrintStackTrace (); } return CustomerList; } /** * Lea la información del cliente en Excel * @param wb * @return * /private list <OtapolicyModel> readExcelValue (Workbook wb) {// Obtenga la primera hoja de shell = wb.getSheetat (0); // Obtenga el número de filas en Excel this.totalrows = sheet.getPhysicalNumberOfRows (); // Obtenga el número de columnas en Excel (presumiblemente hay filas) if (TotalRows> = 1 && Sheet.getrow (0)! = Null) {this.totalcells = sheet.getrow (0) .getPhysicalNumberOfCells (); } List <OtapolicyModel> oTapolicyModellist = new ArrayList <OtapolicyModel> (); Otapolicymodel otapolicymodel; // Número de fila de Excel Loop, comenzando desde la segunda línea. El título no se almacena para (int r = 1; r <totalROWS; r ++) {fila fila = sheet.getrow (r); if (fila == null) continuar; otapolicymodel = new OtapolicyModel (); intente {Thread.CurrentThread (). Sleep (1); } catch (InterruptedException e) {E.PrintStackTrace (); } oTapolicyModel.SetPolicyID (System.CurrentTimemillis ()); // colección de Excel para (int c = 0; c <this.totalcells; c ++) {celular = row.getCell (c); if (null! = cell) {if (c == 0) {otapolicyModel.setSource (celular.getStingCellValue ()); // proveedor} else if (c == 1) {oTapolicyModel.setVenDee (cell.getStringCellValue ()); // outhel} el más if (c == 2) if (cell.getStringCellValue () == "All") {triptype = 0; } else if (cell.getStringCellValue (). Equals ("Single-Way")) {trtType = 10; } else if (cell.getStringCellValue (). Equals ("ida y vuelta")) {triptype = 20; } else if (cell.getStringCellValue (). Equals ("Vuelo directo de una sola vía")) {triptype = 11; } else if (cell.getStringCellValue (). Equals ("ida y vuelta")) {triptype = 12; } else if (cell.getStringCellValue (). Equals ("ida y vuelta")) {triptype = 21; } else if (cell.getStringCellValue (). Equals ("ida y vuelta")) {triptype = 21; } else if (cell.getStringCellValue (). Equals ("ida y vuelta")) {triptype = 22; } oTapolicyModel.SetTripType (triftype); // itinerary type} else if (c == 3) {otapolicyModel.setCarrier (celular.getStingCellValue ()); // código aéreo} más si (c == 4) {oTapolicyModel.setDepcity (cell.getstringstingcelcele () Ciudad} else if (c == 5) {otapolicymodel.setarrCity (Cell.getStringCellValue ()); // Landing City} else if (c == 6) {otapolicyModel.setSaleBegindatel (nuevo BigDecimal (Cell.getNumericCellValue ()). SetScale (0, BigDecimal.round_half_down) .longValue ()); // Fecha de inicio de ventas} else if (c == 7) {oTapolicyModel.setsaleEddatel (nuevo BigDecimal (Cell.getNumericCellValue ()). SetScale (0, BigDecimal.round_half_down) .longValue ()); // Fecha de finalización de ventas} el más if (c == 8) {oTapolicyModel.SetTRavelBegindAl BigDecimal (Cell.getNumericCellValue ()). SetScale (0, BigDecimal.round_half_down) .longValue ()); // Fecha de inicio de viaje} más if (c == 9) {oTapolicyModel.SetTRavelendDatel (nuevo BigDecimal (Cell.getNumericCellValue ()). SetScale (0, BigDecimal.round_half_down) .longValue ()); // Fecha de finalización de viajes} else if (c == 10) {int Cabintype = 9; if (cell.getStringCellValue (). Equals ("All")) {Cabintype = 9; } else if (cell.getStringCellValue (). Equals ("Economy Class")) {Cabintype = 1; } else if (cell.getStringCellValue (). Equals ("Business")) {Cabintype = 2; } else if (cell.getStringCellValue (). Equals ("Primera clase")) {Cabintype = 3; } otapolicyModel.setCobintype (Cabintype); // Cadrift nivel} else if (c == 11) {otapolicyModel.setfdtype (celular.getStringCellValue (). Equals ("por rango de precios")? 1: 2); // REBATE Tipo} si (c == 12) { otapolicymodel.setCabin (Cell.getStringCellValue ()); // cat} else if (c == 13) {otapolicyModel.setPricebegin (celular.getNumericCellValue ()); // precio mínimo} else si (c == 14) { otapolicymodel.setPriceend (cell.getNumericCellValue ()); // precio máximo} else if (c == 15) {otapolicymodel.setlmoney (cell.getNumericCellValue ()); // ahorrar dinero} else if (c == 16) { OtapolicyModel.setFperCent (Cell.getNumericCellValue ()); // Reembolso de precios completos} else if (c == 17) {otapolicyModel.setftppercent (cell.getNumericCellValue ()); // por favor} else si (c == 18) {int portaperlimit = 2; if (cell.getStringCellValue (). Equals ("Yes")) {portierlimit = 1; } else if (cell.getStringCellValue (). Equals ("no")) {portierlimit = 0; } else if (cell.getStringCellValue (). Equals ("Ninguno")) {portierlimit = 2; } oTapolicyModel.setCarrierLimit (portierlimit); // Restricciones de la aerolínea de factura} else if (c == 19) {int transporte = 2; if (cell.getStringCellValue (). Equals ("Sí")) {transport = 1; } else if (cell.getStringCellValue (). Equals ("no")) {transport = 0; } else if (cell.getStringCellValue (). Equals ("no")) {transport = 0; } else if (cell.getStringCellValue (). Equals ("no")) {transport = 0; } else if (cell.getStringCellValue (). Equals ("no")) {transport = 0; } else if (cell.getStringCellValue (). Equals ("no")) {transport = 0; } else if (cell.getStringCellValue (). Equals ("no")) {transport = 0; } else if (cell.getStringCellValue (). Equals ("Unlimited")) {transport = 2; } oTapolicyModel.setTransport (transporte); // Soporte de transporte intermodal} else if (c == 20) {int compartirflight = 2; if (cell.getStringCellValue (). Equals ("Yes")) {SharedFlight = 1; } else if (cell.getStringCellValue (). Equals ("No")) {SharedFlight = 0; } else if (cell.getStringCellValue (). Equals ("Ninguno")) {SharedFlight = 2; } oTapolicyModel.setSharedFlight (SharedFlight); // Soporte de vuelos compartidos} else if (c == 21) {otapolicyModel.setpStatus (cell.getStingCellValue (). Equals ("Valid")? 1: 2); // status} else if (c == 22) {int fartipo = 0; if (cell.getStringCellValue (). Equals ("privado")) {faretype = 1; } else if (cell.getStringCellValue (). Equals ("Publication")) {Faretype = 2; } else if (cell.getStringCellValue (). Equals ("Publication")) {Faretype = 2; } else if (cell.getStringCellValue (). Equals ("All")) {Faretype = 0; } oTapolicyModel.setFaretype (faretype); // Tipo de carga} else if (c == 23) {oTapolicyModel.setLimitPrice (new BigDecimal (Cell.getNumericCellValue ()). SetScale (0, BigDecimal.round_half_down) .longvalue ()); if (c == 24) {int limitTransit = 2; if (cell.getStringCellValue (). Equals ("All")) {LimitTransit = 2; } else if (cell.getStringCellValue (). Equals ("aplicable")) {limitTransit = 0; } else if (cell.getStringCellValue (). Equals ("no aplicable")) {LimitTransit = 1; } oTapolicyModel.setLimitTransit (LimitTransit); // Límite de transición} else if (c == 25) {otapolicyModel.setarrCity (Cell.getStringCellValue ()); // Ciudad de transición} else if (c == 26) {int limitation = 2; if (cell.getStringCellValue (). Equals ("All")) {Limitnation = 2; } else if (cell.getStringCellValue (). Equals ("aplicable")) {Limitnation = 0; } else if (cell.getStringCellValue (). Equals ("no aplicable")) {Limitnation = 1; } oTapolicyModel.setLimitnation (Limitnation); // Límite de nacionalidad} else if (c == 27) {oTapolicyModel.setarrCity (cell.getStingCellValue ()); // nacionalidad} else if (c == 28) {oTapolicyL.setUsername (celular.getStingCellVale ();); } // Agregar CLIENTE OTAPOLYMODELIST.Add (oTapolicyModel); } return otapolicymodellist; }}Clase de herramienta wdwutil.java
paquete com.flight.inter.otaAdapter.commons.util;/*** creado por ling.zhang el 2016/12/29. */ public class wdwutil {// @Description: si es Excel de 2003, el retorno verdadero es 2003 public static static boolean isexcel2003 (string filepath) {return filepath.matches ("^.+/. (? i) (xls) $"); } //@Descripción: si es Excel de 2007, el retorno verdadero es 2007 Public static boolean isexcel2007 (string filepath) {return filepath.matches ("^.+//. (? I) (xlsx) $");}}Nota: En aras de la conveniencia de lectura, el código anterior se publica primero con el método principal y luego el método infantil. En la edición de código real, el método infantil generalmente se edita primero y luego se edita con el método principal. Por ejemplo, el anterior debe editar primero el código de clase de herramienta, luego editar el código de capa de servicio y finalmente editar el código del controlador.
De esta manera, todo el proceso está bien. Tómelo para probarlo ahora
Para obtener un contenido más emocionante, haga clic en "Spring Subiendo y descargue un tema especial" para un estudio e investigación en profundidad.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.