Exportación de excel en java - basado en PO

Tabla de contenido

1. clase de servlet

2. Clase de procesamiento de exportación

primera parte

la segunda parte

clase de generación 3.excel


1. clase de servlet

La siguiente es la clase de servlet exportado, que hereda HttpServlet e implementa el método de servicio.El código clave es la parte roja, excelBook = export(request);

Se basa en los resultados de la consulta del parámetro de solicitud y la entidad del Libro de trabajo. Después de que la respuesta se establece con dos métodos establecidos, el flujo de salida se obtiene con getOutputStream y  , finalmente, ExcelBook se escribe en el flujo de salida. Lo he visto en otros lugares. .

Esta forma de escribir, usar bufferedOutPut puede mejorar cierto rendimiento, pero puede ignorarse cuando hay menos datos. El siguiente es el código fuente de la clase servlet.


@Named("/servlet/exportBarometerServlet/export")
clase pública ExportBarometerServlet extiende HttpServlet
{     registrador ILogger final estático privado = JalorLoggerFactory.getLogger(ExportBarometerServlet.class);   //excelName加上导出的时间为excel的名称     private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");     @Inject     privado IRiskBigScreenService riskBigScreenService;     @Inject     privado IAosService AosService;     @Override     public void service (solicitud HttpServletRequest, respuesta HttpServletResponse)             lanza ServletException, IOException{          Workbook excelBook = null;         intentar

 

    









        { excelBook = exportar (solicitud);         }         catch (WholeException e)         {             throw new ServletException(e);         } catch (ApplicationException e) {             e.printStackTrace();         }         if (excelBook != null)         {             String excelName = "IPMO-RiskProjectListMS";             Fecha fecha = nueva Fecha();                respuesta.setContentType("aplicacion/mx-excel");             respuesta.setHeader("Contenido-Disposición", "archivo adjunto;nombre de archivo=\"" + excelName+dateFormat.format(fecha)                 + ". xlsx\"");             OutputStream fuera = nulo;
           







        




       



            prueba
            {   salida = respuesta.getOutputStream();                 excelBook.write(fuera);                 out.flush();             }             finalmente             {                 if (out != null)                 {                     out.close();                 }             }     }         }
             












2. Clase de procesamiento de exportación

primera parte

excelBook = export(request); El método export() se divide en dos partes, la primera parte obtiene los resultados en forma de Lista o Mapa según la solicitud (convierta el formato según sea necesario)


Exportación de libro de trabajo privado (solicitud HttpServletRequest) lanza ApplicationException
    {         String paramsJson = request.getParameter ("paramsJson");         Mapa mapa = nulo;         prueba {             mapa = JsonUtil.stringToObject(paramsJson, Map.class);         } catch (IOException e1) {             // TODO Bloque catch generado automáticamente             e1.printStackTrace();         }         XiAnQueryConditionVO vo = new XiAnQueryConditionVO();         if( null != map)         {             vo.setPeriod(map.get("period").toString());             vo.setOrgLevel(map.get("orgLevel").toString());













            vo.setOrgCode(map.get("orgCode").toString());
            vo.setL_proj_bu(mapa.get("l_proj_bu").toString());
        }


Obtenga la cadena json de la solicitud, conviértala en un mapa, obtenga el vo del parámetro de entrada, llame al método de servicio para consultar los datos y elija si paginar según sus necesidades.


pagedResult = riskBigScreenService.findBarometerList(vo, pageVO);

List<XiAnBigScreenVO> list = pagedResult.getResult();


Convierta la lista a LinkedHashMap<String,List<String>>, este formato no es HashMap porque LinkedHashMap está ordenado y el orden es consistente con el orden de la lista en getMap(list); También se puede convertir a List<List<String>> para garantizar el orden. De cualquier forma, es por orden a la hora de asignar valores a la tabla de excel.


LinkedHashMap<String,List<String>> mapresult = getMap(lista);


La cadena de LinkedHashMap<String, List<String>> puede elegir dos tipos, uno es el identificador que puede determinar los datos únicos, que provienen de un determinado campo en una lista.

El otro es directamente 1,2,3....


privado LinkedHashMap<String, List<String>> getMap(List<XiAnBigScreenVO> lista de resultados) {         LinkedHashMap<String, List<String>> map = new LinkedHashMap<>();         for(XiAnBigScreenVO resultVO : listaresultados)         {             List<String> list = new ArrayList<>();             list.add(resultVO.getRegionName());             list.add(resultVO.getRepofficeName());             list.add(resultadoVO.getProjNum());             list.add(resultadoVO.getProjName());             list.add(resultadoVO.getProjLevel());             list.add(resultadoVO.getYtd_complete_rate());             list.add(resultadoVO.getGap());             list.add(resultadoVO.









                            



            list.add(resultadoVO.getYtd_aos_gap());
            
            list.add(resultadoVO.getDe_lctd_cgp());
            list.add(resultadoVO.getDe_ytm_cgp());
            list.add(resultadoVO.getEx_lctd_ser_cost());
            list.add(resultadoVO.getEx_ytm_ser_cost());
            
            list.add(resultadoVO.getOperat_warning());
            //未有对应的服务出参
            list.add("");
            lista.añadir("");
            list.add(resultVO.getProjProgressScorePercent());
            list.add(resultadoVO.getEhsScorePercent());
            
            list.add(resultVO.getCustomercomplaintsray());
            list.add(resultVO.getNontechnicalray());
            list.add(resultVO.getCyberaccidentsowner());
            list.add(resultVO.getCyberaccidentsother());
            list.add(resultVO.getItrmangementray());
            
            list.add(null !=resultVO.getQualitTechScore()?resultVO.getQualitTechScore()+"":"");
            list.add(null !=resultVO.getRationTechScore()?resultVO.getRationTechScore()+"":"");
            //list.add(null !=resultVO.getInternalControlScore()?resultVO.getInternalControlScore()+"":"");
            list.add(resultVO.getRiskTopItems());
            list.add(null !=resultVO.getCooperativeResourceScore()?resultVO.getCooperativeResourceScore()+"":"");
            map.put(resultadoVO.getProjNum(), lista);
        }
        devolver mapa;
    }


 

la segunda parte

La segunda parte es wb = ExportBarometer.getXSSFWorkbook(maresult, list, title1, title2); llame al método getXSSFWorkbook(). Cabe señalar que los parámetros de entrada se pueden cambiar de forma flexible según las necesidades. En términos generales, los parámetros de entrada deben tiene una línea de título, la colección List de resultados de la consulta, sheetName.


XSSFWorkbook wb =null;
        //Las matrices también se pueden usar list    
         if ("zh_CN".equals(BaseSdcpUtils.getCurrentLanguage()))
         {              String[] title1 = {"Departamento regional", "Oficina de representación", "Código del proyecto", "Nombre del proyecto","Nivel del proyecto","Progreso","","","Operación","","","","","","Calidad"," ","Completo","","","","Tecnología","Contrato","Cooperación"}; String[] título2 = {"","","" ,              " ", ",

                    "Tasa de finalización del plan de mejora",
                    "valor de finalización real de la mejora",
                    "tasa de finalización del plan de mejora del AOS",
                    "valor de finalización real de la mejora del AOS",
                    "beneficio bruto de la contribución prevista del ciclo completo (antes de la provisión) y desviación del presupuesto ( deduciendo el impacto del equipo),
                    "Utilidad bruta de la contribución prevista de YTD (antes de la provisión) y desviación del presupuesto (deduciendo el impacto del equipo)", "El
                    costo del servicio de ITD excede el presupuesto",
                    "El costo del servicio de YTD excede el presupuesto",
                    "La contribución bruta de ITD desviación",
                    "Tasa de ingresos completados (YTD)",
                    "Advertencia temprana de operación",
                    "Tasa de cumplimiento de SLA",
                    "Tasa de disponibilidad de red",
                    "Quejas importantes de clientes",
                    "Problemas no técnicos",
                    "Incidente de red",
                    "Fallo mayor de MV",
                    "Actualización de gestión",
"","Acuerdo","Cooperación"};              Cadena[] título2 = {"","","","","",



              




                    "Tasa de consecución del plan de transformación",
                    "Transformación real",
                    "Tasa de consecución del plan de transformación de AOS",
                    "Transformación de AOS real",
                    "Previsiones de CGP de LIFECYCLE (antes de la provisión de pérdidas) en comparación con los últimos presupuestos (ex.equipo)",
                    "Previsiones de LCGP de YTD (Antes de la provisión de pérdida) Comparado con los últimos presupuestos (ex.equipo)",
                    "Costo de servicio de ITD sobre el presupuesto del ciclo de vida",
                    "Costo de servicio de YTD sobre el presupuesto anual",
                    "Brecha de ganancia bruta de contribución de ITD",
                    "Tasa de obtención de ingresos (YTD)",
                    "Alerta de operación",
                    "Tarifa estándar de SLA",
                    "Disponibilidad de la red",
                    "ok",
                    "Problema no tecnológico",
                    "Accidente", "
                    Incidente crítico de MV",
                    "Escalamiento de gestión",
                    "Cantidad de riesgo mayor sin cerrar",
                    "Cantidad de problema mayor sin cerrar" ,
                    "Tasa de cierre de supuestos clave de MS",
                    "TFPR/Cumplimiento oportuno de los recursos del socio"};
             wb = ExportBarometer.getXSSFWorkbook(maparesultado,lista,titulo1, título2);
         }
        
        
        devuelve wb;
        


clase de generación 3.excel

Implementación concreta del método getXSSFWorkbook() .

Lado a lado con XSSFWorkbook está HSSFWorkbook, dependiendo de si el formato de Excel es xlsx o xls, uno es 2007 y el otro es la versión 2003.


 

//La línea de título puede ser la primera o la segunda línea, por lo que el parámetro de paso largo no es fijo
    public static XSSFWorkbook getXSSFWorkbook(LinkedHashMap<String, List<String>> map,List<XiAnBigScreenVO> listResult, String[].. . title) {         XSSFWorkbook wb = new XSSFWorkbook();         String sheetName = "";         if ("zh_CN".equals(BaseSdcpUtils.getCurrentLanguage()))         {             sheetName = "Detalles del elemento del barómetro de MS";         }else         {             sheetName = "MsFindBarometerList ";         }         XSSFSheet sheet = wb.createSheet(sheetName);         // Congelar panel         sheet.createFreezePane(0, 2);         XSSFRow fila = hoja.createRow(0);         fila.establecerAlturaEnPuntos(30);









        





// estilo XSSFCellStyle = wb.createCellStyle();
// estilo.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        estilo XSSFCellStyle = getColumnTopStyleX(wb);
        Celda XSSFCell = nulo;
        for (int i = 0; i < título[0].longitud; i++) 
        {             celda = fila.createCell(i);             celda.setCellStyle(estilo);             celda.setCellValue(título[0][i]);             //9000对应34.5 ,则框架导出的宽度20.88对应5447             hoja.setColumnWidth(i, 5447);         }         fila = hoja.createRow(1);         fila.setHeightInPoints(40);         for (int i = 0; i < título[1].longitud; i++)          {






        




            celda = fila.createCell(i);
            celda.setCellStyle(estilo);
            celda.setCellValue(título[1][i]);
        }
        
        for(int j=0;j<=4;j++)
        {             // fusionar celdas, Los cuatro parámetros representan la fila inicial, la fila final, la columna inicial, la columna final             CellRangeAddress region = new CellRangeAddress(0,1,j,j);             sheet.addMergedRegion(region);         }         //Combina celdas según el título, problema de modificación puede considerarse optimización         CellRangeAddress region = new CellRangeAddress(0,0,5,8);         sheet.addMergedRegion(region);                 region = new CellRangeAddress(0,0,9,15);         sheet.addMergedRegion(region);         region = new Dirección de rango de celdas (0, 0,16,17);










        hoja.addMergedRegion(región);
        región = new CellRangeAddress(0,0,18,22);
        hoja.addMergedRegion(región);
        región = new CellRangeAddress(0,0,23,24);
        hoja.addMergedRegion(región);

        

        
        
        //Escriba los datos de la entidad, el orden de las cadenas en la lista debe ser consistente con el orden en la matriz strArray
        int i = 1;
        for (String str : map.keySet()) {             row = sheet.createRow((int) i + 1);             List<String> list = map.get(str);

            // Crea una celda y establece el valor
            para (int j = 0; j < título[0].longitud; j++) {                 XSSFCell datecell = fila.createCell(j);                                 datecell.setCellValue(list.get(j));                 //Establecer el color de la celda                 setColor(i+1,j,datecell,listResult.get(i-1),wb); }             i             ++;         }                 return wb;     }









    


La hoja, la fila y la celda son tres objetos clave. Además de completar tareas básicas, a veces es necesario establecer el tamaño de la celda, el color, la fuente, el tamaño del color de la fuente, etc., fusionar celdas, congelar paneles (generalmente congelar la fila del encabezado) , etc. La anterior es la versión más original. Puede encapsular libremente el método de acuerdo con sus hábitos personales para que el código se vea más organizado y claro.

Supongo que te gusta

Origin blog.csdn.net/Spring_possible/article/details/90052085
Recomendado
Clasificación