Excel注解ColumnType类型新增文本
This commit is contained in:
		
							parent
							
								
									905c08fb2c
								
							
						
					
					
						commit
						11320b2e13
					
				@ -171,7 +171,7 @@ public @interface Excel
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public enum ColumnType
 | 
					    public enum ColumnType
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        NUMERIC(0), STRING(1), IMAGE(2);
 | 
					        NUMERIC(0), STRING(1), IMAGE(2), TEXT(3);
 | 
				
			||||||
        private final int value;
 | 
					        private final int value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ColumnType(int value)
 | 
					        ColumnType(int value)
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@ public class SysUser extends BaseEntity
 | 
				
			|||||||
    private String email;
 | 
					    private String email;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** 手机号码 */
 | 
					    /** 手机号码 */
 | 
				
			||||||
    @Excel(name = "手机号码")
 | 
					    @Excel(name = "手机号码", cellType = ColumnType.TEXT)
 | 
				
			||||||
    private String phonenumber;
 | 
					    private String phonenumber;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** 用户性别 */
 | 
					    /** 用户性别 */
 | 
				
			||||||
 | 
				
			|||||||
@ -39,6 +39,7 @@ import org.apache.poi.ss.usermodel.Cell;
 | 
				
			|||||||
import org.apache.poi.ss.usermodel.CellStyle;
 | 
					import org.apache.poi.ss.usermodel.CellStyle;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.CellType;
 | 
					import org.apache.poi.ss.usermodel.CellType;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.ClientAnchor;
 | 
					import org.apache.poi.ss.usermodel.ClientAnchor;
 | 
				
			||||||
 | 
					import org.apache.poi.ss.usermodel.DataFormat;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.DataValidation;
 | 
					import org.apache.poi.ss.usermodel.DataValidation;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.DataValidationConstraint;
 | 
					import org.apache.poi.ss.usermodel.DataValidationConstraint;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.DataValidationHelper;
 | 
					import org.apache.poi.ss.usermodel.DataValidationHelper;
 | 
				
			||||||
@ -783,6 +784,8 @@ public class ExcelUtil<T>
 | 
				
			|||||||
        titleFont.setFontHeightInPoints((short) 16);
 | 
					        titleFont.setFontHeightInPoints((short) 16);
 | 
				
			||||||
        titleFont.setBold(true);
 | 
					        titleFont.setBold(true);
 | 
				
			||||||
        style.setFont(titleFont);
 | 
					        style.setFont(titleFont);
 | 
				
			||||||
 | 
					        DataFormat dataFormat = wb.createDataFormat();
 | 
				
			||||||
 | 
					        style.setDataFormat(dataFormat.getFormat("@"));
 | 
				
			||||||
        styles.put("title", style);
 | 
					        styles.put("title", style);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        style = wb.createCellStyle();
 | 
					        style = wb.createCellStyle();
 | 
				
			||||||
@ -862,8 +865,37 @@ public class ExcelUtil<T>
 | 
				
			|||||||
        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
 | 
					        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
 | 
				
			||||||
        for (Object[] os : fields)
 | 
					        for (Object[] os : fields)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            Field field = (Field) os[0];
 | 
				
			||||||
            Excel excel = (Excel) os[1];
 | 
					            Excel excel = (Excel) os[1];
 | 
				
			||||||
            String key = StringUtils.format("data_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor());
 | 
					            if (Collection.class.isAssignableFrom(field.getType()))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ParameterizedType pt = (ParameterizedType) field.getGenericType();
 | 
				
			||||||
 | 
					                Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0];
 | 
				
			||||||
 | 
					                List<Field> subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class);
 | 
				
			||||||
 | 
					                for (Field subField : subFields)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Excel subExcel = subField.getAnnotation(Excel.class);
 | 
				
			||||||
 | 
					                    annotationDataStyles(styles, subField, subExcel);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                annotationDataStyles(styles, field, excel);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return styles;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据Excel注解创建表格列样式
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @param styles 自定义样式列表
 | 
				
			||||||
 | 
					     * @param field  属性列信息
 | 
				
			||||||
 | 
					     * @param excel  注解信息
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void annotationDataStyles(Map<String, CellStyle> styles, Field field, Excel excel)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        String key = StringUtils.format("data_{}_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor(), excel.cellType());
 | 
				
			||||||
        if (!styles.containsKey(key))
 | 
					        if (!styles.containsKey(key))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            CellStyle style = wb.createCellStyle();
 | 
					            CellStyle style = wb.createCellStyle();
 | 
				
			||||||
@ -884,11 +916,14 @@ public class ExcelUtil<T>
 | 
				
			|||||||
            dataFont.setFontHeightInPoints((short) 10);
 | 
					            dataFont.setFontHeightInPoints((short) 10);
 | 
				
			||||||
            dataFont.setColor(excel.color().index);
 | 
					            dataFont.setColor(excel.color().index);
 | 
				
			||||||
            style.setFont(dataFont);
 | 
					            style.setFont(dataFont);
 | 
				
			||||||
 | 
					            if (ColumnType.TEXT == excel.cellType())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                DataFormat dataFormat = wb.createDataFormat();
 | 
				
			||||||
 | 
					                style.setDataFormat(dataFormat.getFormat("@"));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            styles.put(key, style);
 | 
					            styles.put(key, style);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
        return styles;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 创建单元格
 | 
					     * 创建单元格
 | 
				
			||||||
@ -904,7 +939,7 @@ public class ExcelUtil<T>
 | 
				
			|||||||
        if (isSubList())
 | 
					        if (isSubList())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // 填充默认样式,防止合并单元格样式失效
 | 
					            // 填充默认样式,防止合并单元格样式失效
 | 
				
			||||||
            sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor())));
 | 
					            sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType())));
 | 
				
			||||||
            if (attr.needMerge())
 | 
					            if (attr.needMerge())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column));
 | 
					                sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column));
 | 
				
			||||||
@ -922,7 +957,7 @@ public class ExcelUtil<T>
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public void setCellVo(Object value, Excel attr, Cell cell)
 | 
					    public void setCellVo(Object value, Excel attr, Cell cell)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (ColumnType.STRING == attr.cellType())
 | 
					        if (ColumnType.STRING == attr.cellType() || ColumnType.TEXT == attr.cellType())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            String cellValue = Convert.toStr(value);
 | 
					            String cellValue = Convert.toStr(value);
 | 
				
			||||||
            // 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
 | 
					            // 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
 | 
				
			||||||
@ -1034,7 +1069,7 @@ public class ExcelUtil<T>
 | 
				
			|||||||
                    CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column);
 | 
					                    CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column);
 | 
				
			||||||
                    sheet.addMergedRegion(cellAddress);
 | 
					                    sheet.addMergedRegion(cellAddress);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor())));
 | 
					                cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType())));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // 用于读取对象中的属性
 | 
					                // 用于读取对象中的属性
 | 
				
			||||||
                Object value = getTargetValue(vo, field, attr);
 | 
					                Object value = getTargetValue(vo, field, attr);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user