| package com.zy.asrs.wcs.utils; | 
|   | 
| import com.zy.asrs.framework.common.Cools; | 
| import io.swagger.annotations.ApiModelProperty; | 
| import org.apache.poi.hssf.usermodel.HSSFWorkbook; | 
| import org.apache.poi.ss.usermodel.Row; | 
| import org.apache.poi.ss.usermodel.Sheet; | 
| import org.apache.poi.ss.usermodel.Workbook; | 
|   | 
| import javax.servlet.http.HttpServletResponse; | 
| import java.io.IOException; | 
| import java.lang.reflect.Field; | 
| import java.lang.reflect.Modifier; | 
| import java.net.URLEncoder; | 
| import java.text.SimpleDateFormat; | 
| import java.util.Date; | 
| import java.util.List; | 
|   | 
| /** | 
|  * Created by vincent on 2/17/2024 | 
|  */ | 
| public class ExcelUtil { | 
|   | 
|     public static void build(Workbook workbook, HttpServletResponse response) { | 
|         response.reset(); | 
|         Utils.cors(response); | 
|         response.setContentType("application/octet-stream; charset=utf-8"); | 
|         try { | 
|             response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("export", "UTF-8")); | 
|             workbook.write(response.getOutputStream()); | 
|         } catch (IOException ignore) {} | 
|     } | 
|   | 
|     public static <T> Workbook create(List<T> list, Class<T> clz) { | 
|         HSSFWorkbook workbook = new HSSFWorkbook(); | 
|         Sheet sheet = workbook.createSheet(clz.getSimpleName()); | 
|   | 
|         Row header = sheet.createRow(0); | 
|         Field[] fields = Cools.getAllFields(clz); | 
|         int headerIdx = 0; | 
|         for (Field field : fields) { | 
|             if (Modifier.isFinal(field.getModifiers()) | 
|                     || Modifier.isStatic(field.getModifiers()) | 
|                     || Modifier.isTransient(field.getModifiers())) { | 
|                 continue; | 
|             } | 
|             String memo = "未知"; | 
|             if (field.isAnnotationPresent(ApiModelProperty.class)) { | 
|                 memo = field.getAnnotation(ApiModelProperty.class).value(); | 
|             } | 
|             header.createCell(headerIdx).setCellValue(memo); | 
|             headerIdx++; | 
|         } | 
|   | 
|         int rowIndex = 1; | 
|         for (T t : list) { | 
|             Row row = sheet.createRow(rowIndex++); | 
|   | 
|             int cellIndex = 0; | 
|             for (Field field : fields) { | 
|                 if (Modifier.isFinal(field.getModifiers()) | 
|                         || Modifier.isStatic(field.getModifiers()) | 
|                         || Modifier.isTransient(field.getModifiers())) { | 
|                     continue; | 
|                 } | 
|   | 
|                 field.setAccessible(true);  // 此行很重要,特别是字段为private时 | 
|                 Object value = null; | 
|                 try { | 
|                     value = field.get(t); | 
|                 } catch (IllegalAccessException e) { | 
|                     e.printStackTrace(); | 
|                 } | 
|                 if (value != null) { | 
|                     if (value instanceof Date) { | 
|                         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
|                         row.createCell(cellIndex).setCellValue(sdf.format((Date) value)); | 
|                     } else { | 
|                         row.createCell(cellIndex).setCellValue(value.toString()); | 
|                     } | 
|                 } | 
|                 cellIndex++; | 
|             } | 
|         } | 
|   | 
|         for (int i = 0; i <= fields.length; i++) { | 
|             sheet.autoSizeColumn(i); | 
|         } | 
|   | 
|         return workbook; | 
|     } | 
|   | 
|   | 
|   | 
| } |