zoukankan      html  css  js  c++  java
  • java 功能点

    1. 根据页面中table返回excel,不请求后台

    .factory('exportExcelService',function($window){
            var uri='data:application/vnd.ms-excel;base64,',
                template='<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',
                base64=function(s){return $window.btoa(unescape(encodeURIComponent(s)));},
                format=function(s,c){return s.replace(/{(w+)}/g,function(m,p){
                    return c[p];
                })};
            return {
                tableToExcel:function(tableId,worksheetName){
                    var table=$(tableId);
                    var ctx={worksheet:worksheetName,table:table.html()};
                    var    href=uri+base64(format(template,ctx));
                    return href;
                }
            };
        })

    2. 后台请求生成excel

    @RequestMapping("/exportExcelRecord")
        public void ExportExcelRecord(MedicalCardModel medicalCardModel,HttpServletResponse response){
            List<MedicalCardResultModel> result=medicalCardService.getMedicalRecord(medicalCardModel);
            int size  = result.size();
            OutputStream out =null;
            try {
                out = ExcelBasePoiUtils.setResponse(response, "record.xlsx");
                SXSSFWorkbook wb = new SXSSFWorkbook(5000);
                Sheet sh = wb.createSheet();
                ExcelDataFormatter edf = new ExcelDataFormatter();
                Map<String, String> mapGender = new HashMap<String, String>();
                mapGender.put(IS_MAN+"", GenderEnums.getName(IS_MAN));
                mapGender.put(IS_WOMAN+"", GenderEnums.getName(IS_WOMAN));
                edf.set("gender", mapGender);
                List<MedicalCardResultModel> list =null;
                for (int i = 0; i < size; i = i + EXCEL_MAX_FROM_DB) {
                    list=(size-i>EXCEL_MAX_FROM_DB?result.subList(i, i + EXCEL_MAX_FROM_DB):result.subList(i,i+size));
                    ExcelBasePoiUtils.getWorkBook(list, sh, wb, edf);
                }
                wb.write(out);
                wb.dispose();
                ExcelBasePoiUtils.close(out);
            } catch (Exception e) {
            }
        }
    public static <T> void getWorkBook(List<T> list, Sheet sh, Workbook book, ExcelDataFormatter edf) throws Exception {
            Field[] fields = ReflectUtils.getClassFieldsAndSuperClassFields(list.get(0).getClass());
            Excel excel = null;
            Cell cell = null;
            Row row = null;
            int columnIndex = 0;
            if(sh.getLastRowNum() == 0){
                row = sh.createRow(0);
                XSSFCellStyle titleStyle = setTitleStyle(book);
                for (Field field : fields) {
                    field.setAccessible(true);
                    excel = field.getAnnotation(Excel.class);
                    if (excel == null || excel.skip() == true) {
                        continue;
                    }
                    sh.setColumnWidth(columnIndex, excel.width() * 256);
                    cell = row.createCell(columnIndex);
                    cell.setCellStyle(titleStyle);
                    cell.setCellValue(excel.value());
                    columnIndex++;
                }
            }
            
            CellStyle cs = book.createCellStyle();
            CreationHelper createHelper = book.getCreationHelper();
            for (T t : list) {
                int rowColumn = ThreadLocalUtils.get();
                row = sh.createRow(rowColumn);
                columnIndex = 0;
                Object o;
                for (Field field : fields) {
                    field.setAccessible(true);
                    excel = field.getAnnotation(Excel.class);
                    if (excel == null || excel.skip() == true) {
                        continue;
                    }
    
                    cell = row.createCell(columnIndex);
                    o = field.get(t);
                    //常用类型置前
                    if (o == null) {
                        cell.setCellValue("");
                    }else if(o instanceof String){
                        cell.setCellValue((String)o);
                    }else if (o instanceof Integer){
                        Integer intValue = (Integer)o;
                        if (edf == null) {
                            cell.setCellValue(intValue);
                        } else {
                            Map<String, String> map = edf.get(field.getName());
                            if (map == null) {
                                cell.setCellValue(intValue);
                            } else {
                                cell.setCellValue(map.get(intValue.toString()));
                            }
                        }
                    }else if (o instanceof Date) {
                        cs.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
                        cell.setCellStyle(cs);
                        cell.setCellValue((Date) o);
                    } else if (o instanceof Double || o instanceof Float) {
                        cell.setCellValue((Double) o);
                    } /*else if (o instanceof Boolean) {
                        Boolean boolValue = (Boolean) o;
                        if (edf == null) {
                            cell.setCellValue(boolValue);
                        } else {
                            Map<String, String> map = edf.get(field.getName());
                            if (map == null) {
                                cell.setCellValue(boolValue);
                            } else {
                                cell.setCellValue(map.get(boolValue.toString().toLowerCase()));
                            }
                        }
                    }*/else if (o instanceof Long){
                        Long longValue = (Long)o;
                        cell.setCellValue(longValue);
                    }else {
                        cell.setCellValue(o.toString());
                    }
                    columnIndex++;
                }
                ThreadLocalUtils.add();
            }
        }
        
    /**
         * 释放资源
         * @param os
         * @throws IOException
         */
        public static void close(OutputStream os) throws IOException{
            ThreadLocalUtils.remove();
            os.flush();
            os.close();
        }
    /**
     * 
     * <p>Description: Excel 注解, 配合反射完成Excel 到  javaBean 的映射</p>
     * <p>Company: GDKJ</p>
     * @author wbw
     * @version 1.0.0
     * @date 2017年3月2日
     */
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.TYPE})
    public @interface Excel {
        String value() default "";
        int width() default 20;
        boolean skip() default false;
    }
        @Excel(value="序号",skip=true)
        private Long id;
    
        @Excel("病案号")
        private String caseNo;

    3. 导入excel

    @RequestMapping("/importExcelRecord")
        public DataModel<Object> ImportExcelRecord(MultipartFile file){
    List<String> caseNoList = new ArrayList<String>();
    		try {
    			caseNoList = ExcelImport.readExcel(file);
    			if(caseNoList.size()<1)
    			{
    				return ResultMapUtils.getResultMap(model);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    			return ResultMapUtils.getFailResultMap(Constants.GET_ERROR_KEY, e.getMessage());
    		}
    
    /**
    	 * 读excel
    	 * @param file
    	 * @return
    	 * @throws IOException
    	 */
    	public static List<String> readExcel(MultipartFile file) throws IOException {
    		String fileName = file.getOriginalFilename();
    		String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName
    				.substring(fileName.lastIndexOf(".") + 1);
    		if ("xls".equals(extension)) {
    			return read2003Excel(file);
    		} else if ("xlsx".equals(extension)) {
    			return read2007Excel(file);
    		} else {
    			throw new IOException("不支持的文件类型");
    		}
    	}
    
    	/**
    	 * 读取 office 2003 excel
    	 * 第二个参数: 是哪列开启非空效验,如果是-1就开启全部非空效验,列从0开始
    	 * @throws IOException
    	 * @throws FileNotFoundException
    	 * @author wbw
    	 */
    	private static List<String> read2003Excel(MultipartFile file)
    			throws IOException {
    		HSSFWorkbook hwb = new HSSFWorkbook(file.getInputStream());
    		HSSFSheet sheet = hwb.getSheetAt(0);
    		String value = null;
    		HSSFRow row = null;
    		HSSFCell cell = null;
    		List<String> result = new ArrayList<String>();
    		for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) 
    		{
    			row = sheet.getRow(i);
    			if (row == null) {
    				continue;
    			}
    			int firstColumn=row.getFirstCellNum();
    			cell = row.getCell(firstColumn);
    			if (cell == null)
    			{
    				continue;
    			}
    			DecimalFormat df = new DecimalFormat("0");// 格式化 number String
    			switch (cell.getCellType())
    			{
    				case XSSFCell.CELL_TYPE_STRING:
    					value =cell.getStringCellValue();
    					break;
    				case XSSFCell.CELL_TYPE_NUMERIC:
    					if ("@".equals(cell.getCellStyle().getDataFormatString())) 
    					{
    						value = df.format(cell.getNumericCellValue()).toString();
    					} else if ("General".equals(cell.getCellStyle()
    							.getDataFormatString())) {
    						value = df.format(cell.getNumericCellValue());
    					} 
    					break;
    				default:
    					value = "";
    			}
    			if (value == null || "".equals(value)) {
    				continue;
    			}
    			result.add(value);
    		}
    		return result;
    	}
    
    	/**
    	 * 读取Office 2007 excel
    	 * */
    	private static List<String> read2007Excel(MultipartFile file) 
    			throws IOException {
    		XSSFWorkbook xwb = new XSSFWorkbook(file.getInputStream());
    		XSSFSheet sheet = xwb.getSheetAt(0);
    		String value = null;
    		XSSFRow row = null;
    		XSSFCell cell = null;
    		List<String> result = new ArrayList<String>();
    		for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) 
    		{
    			row = sheet.getRow(i);
    			if (row == null) {
    				continue;
    			} 
    			cell = row.getCell(row.getFirstCellNum());
    			if (cell == null) {
    				continue;
    			}
    			DecimalFormat df = new DecimalFormat("0");// 格式化 number String
    			switch (cell.getCellType()) 
    			{
    				case XSSFCell.CELL_TYPE_STRING:
    					value = cell.getStringCellValue();
    					break;
    				case XSSFCell.CELL_TYPE_NUMERIC:
    					if ("@".equals(cell.getCellStyle().getDataFormatString())) 
    					{
    						value = df.format(cell.getNumericCellValue()).toString();
    					} else if ("General".equals(cell.getCellStyle()
    							.getDataFormatString())) {
    						value = df.format(cell.getNumericCellValue());
    					} 
    					break;
    				default:
    					value = "";
    			}
    			if (value == null || "".equals(value)) {
    				continue;
    			}
    			result.add(value);
    		}
    		return result;
    	}
    

     4. 点击编辑,编辑变保存,输入框可编辑,获取焦点

    <td style="padding: 0px 0px;">
                            <input type="text" name="correction" class="form-control" ng-model="cor.correction" ng-readonly="checkEdit"/>
                        </td>
                        <td>{{cor.operator}}</td>
                        <td>{{cor.updatetime | date:'yyyy-MM-dd'}}</td>
                        <td>
                            <a href="javascript:void(0)" class="operate_a" ng-click="editSec($event,cor.id,cor.correction)">编辑</a>
    $scope.checkEdit = true;

    $scope.editSec = function (event,id,context) { if(angular.element(event.target).context.innerHTML == "编辑"){ $scope.checkEdit = false; angular.element(event.target).parents("tr").find("input").focus(); angular.element(event.target).context.innerHTML = "保存"; }else{ $scope.updateCor(id,context); $scope.checkEdit = true; angular.element(event.target).context.innerHTML = "编辑"; } }
  • 相关阅读:
    预热buffer pool
    MySQL · 性能优化· InnoDB buffer pool flush策略漫谈
    事务并发控制
    LOAD DATA INFILE – performance case study
    隐式锁
    percona-xtrabackup安装
    mysql 表空间及索引的查看方法
    mysql用户权限
    mysql修改数据库名
    MySQL对innodb某一个表进行移动
  • 原文地址:https://www.cnblogs.com/yangfei-beijing/p/6603816.html
Copyright © 2011-2022 走看看