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; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
} 
 |