mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	Excel注解支持自动统计数据总和
This commit is contained in:
		| @@ -100,6 +100,11 @@ public @interface Excel | ||||
|      */ | ||||
|     public String targetAttr() default ""; | ||||
|  | ||||
|     /** | ||||
|      * 是否自动统计数据,在最后追加一行统计数据总和 | ||||
|      */ | ||||
|     public boolean isStatistics() default false; | ||||
|  | ||||
|     /** | ||||
|      * 字段类型(0:导出导入;1:仅导出;2:仅导入) | ||||
|      */ | ||||
|   | ||||
| @@ -16,6 +16,7 @@ import java.util.Date; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
| import java.util.UUID; | ||||
| import java.util.stream.Collectors; | ||||
| import org.apache.poi.hssf.usermodel.HSSFDateUtil; | ||||
| @@ -103,6 +104,16 @@ public class ExcelUtil<T> | ||||
|      */ | ||||
|     private List<Object[]> fields; | ||||
|  | ||||
|     /** | ||||
|      * 统计列表 | ||||
|      */ | ||||
|     private Map<Integer, Double> statistics = new HashMap<Integer, Double>(); | ||||
|  | ||||
|     /** | ||||
|      * 数字格式 | ||||
|      */ | ||||
|     private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); | ||||
|  | ||||
|     /** | ||||
|      * 实体对象 | ||||
|      */ | ||||
| @@ -342,6 +353,7 @@ public class ExcelUtil<T> | ||||
|                 if (Type.EXPORT.equals(type)) | ||||
|                 { | ||||
|                     fillExcelData(index, row); | ||||
|                     addStatisticsRow(); | ||||
|                 } | ||||
|             } | ||||
|             String filename = encodingFilename(sheetName); | ||||
| @@ -448,6 +460,15 @@ public class ExcelUtil<T> | ||||
|         headerFont.setColor(IndexedColors.WHITE.getIndex()); | ||||
|         style.setFont(headerFont); | ||||
|         styles.put("header", style); | ||||
|          | ||||
|         style = wb.createCellStyle(); | ||||
|         style.setAlignment(HorizontalAlignment.CENTER); | ||||
|         style.setVerticalAlignment(VerticalAlignment.CENTER); | ||||
|         Font totalFont = wb.createFont(); | ||||
|         totalFont.setFontName("Arial"); | ||||
|         totalFont.setFontHeightInPoints((short) 10); | ||||
|         style.setFont(totalFont); | ||||
|         styles.put("total", style); | ||||
|  | ||||
|         return styles; | ||||
|     } | ||||
| @@ -560,6 +581,7 @@ public class ExcelUtil<T> | ||||
|                     // 设置列类型 | ||||
|                     setCellVo(value, attr, cell); | ||||
|                 } | ||||
|                 addStatisticsData(column, Convert.toStr(value), attr); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception e) | ||||
| @@ -726,6 +748,53 @@ public class ExcelUtil<T> | ||||
|         return DictUtils.getDictValue(dictType, dictLabel, separator); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 合计统计信息 | ||||
|      */ | ||||
|     private void addStatisticsData(Integer index, String text, Excel entity) | ||||
|     { | ||||
|         if (entity != null && entity.isStatistics()) | ||||
|         { | ||||
|             Double temp = 0D; | ||||
|             if (!statistics.containsKey(index)) | ||||
|             { | ||||
|                 statistics.put(index, temp); | ||||
|             } | ||||
|             try | ||||
|             { | ||||
|                 temp = Double.valueOf(text); | ||||
|             } | ||||
|             catch (NumberFormatException e) | ||||
|             { | ||||
|             } | ||||
|             statistics.put(index, statistics.get(index) + temp); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 创建统计行 | ||||
|      */ | ||||
|     public void addStatisticsRow() | ||||
|     { | ||||
|         if (statistics.size() > 0) | ||||
|         { | ||||
|             Cell cell = null; | ||||
|             Row row = sheet.createRow(sheet.getLastRowNum() + 1); | ||||
|             Set<Integer> keys = statistics.keySet(); | ||||
|             cell = row.createCell(0); | ||||
|             cell.setCellStyle(styles.get("total")); | ||||
|             cell.setCellValue("合计"); | ||||
|  | ||||
|             for (Integer key : keys) | ||||
|             { | ||||
|                 cell = row.createCell(key); | ||||
|                 cell.setCellStyle(styles.get("total")); | ||||
|                 cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key))); | ||||
|             } | ||||
|             statistics.clear(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 编码文件名 | ||||
|      */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 RuoYi
					RuoYi