• 导出excel


    @GetMapping("/{hid}")
        public void userLoginExport(HttpServletResponse response,@PathVariable("hid") Long hid) {
            // 查询需要导出的数据
            List<Map<String,String>> list = efileService.getExportDataByhid(hid);
            if(list == null || list.size() <= 0){
                throw new SelectNoFindException("导出失败,数据为空!",null);
            }
            // 创建工作薄
            Properties prop = System.getProperties();
            String os = prop.getProperty("os.name");
            String filePath = "";
            if(os.startsWith("Win")) {
                filePath = ContentConstant.EFILE_WINDOWS;
            }else{
                filePath = ContentConstant.EFILE_LINUX;
            }
            // 在这里是直接读取的Excel模板,不用再创建表头
            File file = new File(filePath  + EfileConstant.EFILE_MODEL_NAME);
            InputStream io = null;
            HSSFWorkbook workbook = null;
            try {
                io = new FileInputStream(file);
                workbook = new HSSFWorkbook(io);
            }catch (Exception e){
                e.printStackTrace();
                throw new SelectNoFindException("导出失败,找不到默认模板!",e.getMessage());
            }
            workbook.setSheetName(0,EfileConstant.EXPORT_NAME);
            // 读取excel中的内容
            HSSFSheet sheet = workbook.getSheetAt(0);
            HSSFRow row = null;
            HSSFCell cell = null;
            // 设置模板样式,锁定内容
            HSSFCellStyle locked = createStyle(workbook);
            int rowNumber = 2;
            String value = null;
            for(Map<String,String> m : list){
                if(m != null){
                    row = sheet.getRow(rowNumber++);
                    for(int i = 0,n = 1; i < EfileConstant.EXPORT_DEFAULT_PROPERTY.length;i++,n++){
                        value = null;
                        cell = row.createCell(n);
                        cell.setCellStyle(locked);
                        value = String.valueOf(m.get(EfileConstant.EXPORT_DEFAULT_PROPERTY[i]));
                        if(value != null && !value.equals("null")){
                            // 当等于性别时
                            if(EfileConstant.EXPORT_DEFAULT_PROPERTY[i].equals("sex")){
                                if(Integer.valueOf(value) == UserConstant.SEX_MAN ){
                                    cell.setCellValue(UserConstant.SEX_MAN_ALIAS);
                                }else{
                                    cell.setCellValue(UserConstant.SEX_WOMAN_ALIAS);
                                }
                            }else{
                                cell.setCellValue(value);
                            }
                        }
                        cell = null;
                    }
                }
                row = null;
            }
            //设置返回header
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename="+EfileConstant.EXPORT_NAME + System.currentTimeMillis() +".xls");
            try{
                workbook.write(response.getOutputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }     

    创建Excel模板 // 创建工作薄

            HSSFWorkbook workbook = new HSSFWorkbook();
            // 创建工作表sheet
            HSSFSheet sheet = workbook.createSheet(efileModel.getName());
            // 创建单元格样式
            HSSFCellStyle style =  workbook.createCellStyle();
            // 加粗
            HSSFFont font = workbook.createFont();
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    // 单元格数据类型为字符串 style.setDataFormat(workbook.createDataFormat().getFormat(
    "@")); style.setFont(font); // 文字水平居中 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 文字垂直居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 设置未锁定 style.setLocked(false); sheet.setDefaultColumnStyle(0, style); // 单元格宽度自适应 //sheet.autoSizeColumn(1, true); // 合并单元格cellRangAddress四个参数,第一个起始行,第二终止行,第三个起始列,第四个终止列 for(int z = 0; z < CELL_DEFAULT_LENTH ; z++){ // 设置指定列度 sheet.setColumnWidth(z, 256*15);
           // 将该列的第一行和第二行单元格合并 sheet.addMergedRegion(
    new CellRangeAddress(0, 1, z, z)); }// 默认表头长度 int number = 4;
    // 有两行表头,第一行需要将某两列的单元格合并,而第二行不需要合并 if(list_twoCell.size() > 0){ for(int y = 0; y < list_twoCell.size() ; y++){ sheet.addMergedRegion(new CellRangeAddress(0, 0, (number+y*2), (number+y*2+1))); } }// 创建表头(表头的高度) HSSFRow row1 = sheet.createRow(0); row1.setHeight((short) 750); HSSFRow row2 = sheet.createRow(1); row1.setHeight((short) 600); // 单元格 HSSFCell cell = null; HSSFCell cell2 = null;
         // 笨方法,写固定的表头 cell
    = row1.createCell(0); cell.setCellValue("ID"); cell = row1.createCell(1); cell.setCellValue("姓名"); cell.setCellStyle(style); cell = row1.createCell(2); cell.setCellValue("性别"); cell.setCellStyle(style);cell = row1.createCell(3); cell.setCellValue("家长手机号"); cell.setCellStyle(style); cell = row1.createCell(4); cell.setCellValue("籍贯"); cell.setCellStyle(style);// 如果存在手机号,则记录手机号的表头索引 int phone_index = 0;// 如果存在籍贯,则记录籍贯的表头索引 int nativaPlace_index = 0;
         // 动态设置某两列中第一行合并了两个单元格,而第二行未合并的表头
    for(int n = 0,size = 0; n < twoCellLens; n = n+2,size++){ cell = row1.createCell(n + number); cell.setCellValue(list_twoCell.get(size)); cell.setCellStyle(style); cell2 = row2.createCell(n + number); cell2.setCellValue("右眼(OD)"); cell2.setCellStyle(style); cell2 = row2.createCell(n + 1 + number); cell2.setCellValue("左眼(OS)"); cell2.setCellStyle(style); }// 数据校验(手机号长度) lenthValidate(sheet,3,3,"11");//加载下拉列表内容 String[] textList = null; // 性别 setList(sheet, new String[]{UserConstant.SEX_MAN_ALIAS,UserConstant.SEX_WOMAN_ALIAS}, 2,2);// 籍贯 setList(sheet, RaceConstant.provinces, 4, 4);// 设置单元格数据格式为字符串 for (int i = 2; i < 10000; i++) { row1 = sheet.createRow(i); // 设置行高 row1.setHeightInPoints(25); for(int m = 0;m <number;m++){ cell = row1.createCell(m); cell.setCellStyle(style); } } // 隐藏第一列 sheet.setColumnHidden((short)0,true); // 创建文件 Properties prop = System.getProperties(); String os = prop.getProperty("os.name"); String filePath = ""; if(os.startsWith("Win")) { filePath = ContentConstant.EFILE_WINDOWS; }else{ filePath = ContentConstant.EFILE_LINUX; } String fileName = System.currentTimeMillis() +".xls"; File f = new File(filePath + fileName); FileOutputStream fout = null; try { f.createNewFile(); fout = new FileOutputStream(f); workbook.write(fout); }catch(IOException e){ e.printStackTrace(); throw new SelectNoFindException("生成筛查模板失败!",e.getMessage()); }finally { try { if(fout != null){ fout.close(); } if(workbook != null) { workbook.close(); } }catch(IOException e){ e.printStackTrace(); throw new SelectNoFindException("生成筛查模板失败!",e.getMessage()); } }

    添加校验

    /**
          * @Author holley
          * @Description 加载下拉列表内容
          * @Date 2018/11/2 16:27
          * @Param [sheet, textList, index]
          * @return void
          */
        private void setList(HSSFSheet sheet, String[] textList, int firstCol,int lastCol) {
            //下拉列表
            HSSFDataValidationHelper helper = new HSSFDataValidationHelper(sheet);
            DataValidationConstraint dvConstraint1 = helper.createExplicitListConstraint(textList);
            dvConstraint1.setExplicitListValues(textList);
            //设置数据有效性加载在哪个单元格上。四个参数分别是:起始行、终止行、起始列、终止列
            CellRangeAddressList addressList1 = new CellRangeAddressList( 2,  10000, firstCol,lastCol);
            //数据有效性对象
            DataValidation dataValidation1 = helper.createValidation(dvConstraint1, addressList1);
            sheet.addValidationData(dataValidation1);
        }
    
        private void lenthValidate(HSSFSheet sheet,int firstCol,int lastCol,String limitLenth) {
            //DVConstraint constraint = DVConstraint.createCustomFormulaConstraint("");
            DVConstraint constraint = DVConstraint.createNumericConstraint(
                    DataValidationConstraint.ValidationType.TEXT_LENGTH,
                    DataValidationConstraint.OperatorType.BETWEEN, "0", limitLenth);
            //设置数据有效性加载在哪个单元格上。四个参数分别是:起始行、终止行、起始列、终止列
            CellRangeAddressList regions = new CellRangeAddressList( 2,  10000, firstCol,lastCol);
            //数据有效性对象
            DataValidation validation = new HSSFDataValidation(regions,constraint);
            validation.createErrorBox("超出限制长度!", "格式错误,长度不能超过"+ limitLenth +"位");
            sheet.addValidationData(validation);
        }
  • 相关阅读:
    enmo_day_07
    enmo_day_04
    enmo_day_05
    数据仓库的模型设计
    Lucene 概念,定义应用场景
    enum 枚举的简单应用
    单例模式&synchronized
    Spark的 DAGschedule & task schedule 区别以及相互联系
    Spark的stage & job & task 到底是什么 ,以及划分原理
    Java基本数据类型&引用类型总结
  • 原文地址:https://www.cnblogs.com/zhlblogs/p/10077731.html
Copyright © 2020-2023  润新知