Package org.jeecgframework.poi.excel

Source Code of org.jeecgframework.poi.excel.ExcelPublicUtil

package org.jeecgframework.poi.excel;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPicture;
import org.apache.poi.hssf.usermodel.HSSFPictureData;
import org.apache.poi.hssf.usermodel.HSSFShape;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.PictureData;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFPicture;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.hibernate.mapping.Collection;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import org.jeecgframework.poi.excel.annotation.ExcelEntity;
import org.jeecgframework.poi.excel.annotation.ExcelIgnore;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;

public class ExcelPublicUtil {
 
 
  public static String GET = "get";
  public static String SET = "set";
 
  /**
   * 获取class的 包括父类的
   * @param type
   * @return
   */
  public static Field[] getClassFields(Class<?> clazz) {
    List<Field> list = new ArrayList<Field>();
    Field[] fields;
    do{
      fields = clazz.getDeclaredFields();
      for(int i = 0;i<fields.length;i++){
        list.add(fields[i]);
      }
      clazz = clazz.getSuperclass();
    }while(clazz!= Object.class&&clazz!=null);
    return list.toArray(fields);
  }
 
  /**
   * 判断是不是集合的实现类
   * @param clazz
   * @return
   */
  public static boolean isCollection(Class<?> clazz) {
    return clazz.isAssignableFrom(List.class)||
        clazz.isAssignableFrom(Set.class)||
        clazz.isAssignableFrom(Collection.class);
//    String colleciton = "java.util.Collection";
//    Class<?>[] faces = clazz.getInterfaces();
//    for (Class<?> face : faces) {
//      if(face.getName().equals(colleciton)){
//        return true;
//      }else{
//        if(face.getSuperclass()!= Object.class&&face.getSuperclass()!=null){
//          return isCollection(face.getSuperclass());
//        }
//      }
//    }
//    if(clazz.getSuperclass()!= Object.class&&clazz.getSuperclass()!=null){
//      return isCollection(clazz.getSuperclass());
//    }
//    return false;
  }
  /**
   * 判断是否不要在这个excel操作中
   * @param field
   * @param targetId
   * @return
   */
  public static boolean isNotUserExcelUserThis(Field field, String targetId) {
    boolean boo = true;
    if(field.getAnnotation(ExcelIgnore.class)!=null){
      boo = true;
    }else if(boo&&field.getAnnotation(ExcelCollection.class)!=null
        &&isUseInThis(field.getAnnotation(ExcelCollection.class).exportName(),targetId)){
      boo = false;
    }else if(boo&&field.getAnnotation(Excel.class)!=null
        &&isUseInThis(field.getAnnotation(Excel.class).exportName(),targetId)){
      boo = false;
    }else if(boo&&field.getAnnotation(ExcelEntity.class)!=null
        &&isUseInThis(field.getAnnotation(ExcelEntity.class).exportName(),targetId)){
      boo = false;
    }
    return boo;
  }
 
  /**
   * 判断是不是使用
   * @param exportName
   * @param targetId
   * @return
   */
  private static boolean isUseInThis(String exportName, String targetId) {
    return targetId == null || exportName.equals("")
        || exportName.indexOf("_") < 0
        || exportName.indexOf(targetId) != -1;
  }
  /**
   * 是不是java基础类
   * @param field
   * @return
   */
  public static boolean isJavaClass(Field field) {
    Class<?> fieldType = field.getType();
    boolean isBaseClass = false;
    if(fieldType.isArray()){
      isBaseClass = false;
    }else if (fieldType.isPrimitive()||fieldType.getPackage()==null
        || fieldType.getPackage().getName().equals("java.lang")
        || fieldType.getPackage().getName().equals("java.math")
        || fieldType.getPackage().getName().equals("java.util")) {
      isBaseClass =  true;
    }
    return isBaseClass;
  }
 
 
  /**
   * 彻底创建一个对象
   * @param clazz
   * @return
   */
  public static Object createObject(Class<?> clazz,String targetId) {
    Object obj = null;
    String fieldname;
    Method setMethod;
    try {
      obj = clazz.newInstance();
      Field[] fields = getClassFields(clazz);
      for(Field field:fields){
        if(isNotUserExcelUserThis(field, targetId)){continue;}
        if(isCollection(field.getType())){
          ExcelCollection collection = field
              .getAnnotation(ExcelCollection.class);
          fieldname = field.getName();
          setMethod = getMethod(fieldname,clazz,field.getType());
          setMethod.invoke(obj,ExcelPublicUtil.class.getClassLoader().loadClass(collection.type()).newInstance());
        }else if(!isJavaClass(field)){
          fieldname = field.getName();
          setMethod = getMethod(fieldname,clazz,field.getType() );
          setMethod.invoke(obj, createObject(field.getType(),targetId));
        }
      }
     
    } catch (Exception e) {
      e.printStackTrace();
    }
    return obj;
   
  }
  /**
   * 获取方法
   * @param name
   * @param pojoClass
   * @return
   * @throws Exception
   */
  public static Method getMethod(String name, Class<?> pojoClass)
      throws Exception {
    StringBuffer getMethodName = new StringBuffer(GET);
    getMethodName.append(name.substring(0, 1).toUpperCase());
    getMethodName.append(name.substring(1));
    return pojoClass.getMethod(getMethodName.toString(),new Class[]{});
  }
  /**
   * 获取方法
   * @param name
   * @param pojoClass
   * @param type
   * @return
   * @throws Exception
   */
  public static Method getMethod(String name, Class<?> pojoClass,Class<?> type)
      throws Exception {
    StringBuffer getMethodName = new StringBuffer(SET);
    getMethodName.append(name.substring(0, 1).toUpperCase());
    getMethodName.append(name.substring(1));
    return pojoClass.getMethod(getMethodName.toString(),new Class[]{type});
  }
 
  /**
   *
   * @param photoByte
   * @return
   */
  public static String getFileExtendName(byte[] photoByte) {
    String strFileExtendName = "JPG";
    if ((photoByte[0] == 71) && (photoByte[1] == 73)
        && (photoByte[2] == 70) && (photoByte[3] == 56)
        && ((photoByte[4] == 55) || (photoByte[4] == 57))
        && (photoByte[5] == 97)) {
      strFileExtendName = "GIF";
    } else if ((photoByte[6] == 74) && (photoByte[7] == 70)
        && (photoByte[8] == 73) && (photoByte[9] == 70)) {
      strFileExtendName = "JPG";
    } else if ((photoByte[0] == 66) && (photoByte[1] == 77)) {
      strFileExtendName = "BMP";
    } else if ((photoByte[1] == 80) && (photoByte[2] == 78)
        && (photoByte[3] == 71)) {
      strFileExtendName = "PNG";
    }
    return strFileExtendName;
  }
 
  /**
     * 获取Excel2003图片
     * @param sheet 当前sheet对象
     * @param workbook 工作簿对象
     * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
     */ 
    @SuppressWarnings("unchecked")
  public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sheet,
        HSSFWorkbook workbook) { 
        Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
        List<HSSFPictureData> pictures = workbook.getAllPictures()
        if (pictures.size() != 0) { 
            for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) { 
                HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor()
                if (shape instanceof HSSFPicture) { 
                    HSSFPicture pic = (HSSFPicture) shape; 
                    int pictureIndex = pic.getPictureIndex() - 1
                    HSSFPictureData picData = pictures.get(pictureIndex)
                    String picIndex = String.valueOf(anchor.getRow1()) + "_" 
                            + String.valueOf(anchor.getCol1())
                    sheetIndexPicMap.put(picIndex, picData)
                }
            } 
            return sheetIndexPicMap; 
        } else
            return (Map<String, PictureData>) sheetIndexPicMap.put(null, null)
       
    } 
 
    /**
     * 获取Excel2007图片
     * @param sheetNum 当前sheet编号
     * @param sheet 当前sheet对象
     * @param workbook 工作簿对象
     * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
     */ 
    public static Map<String, PictureData> getSheetPictrues07
            XSSFSheet sheet, XSSFWorkbook workbook) { 
        Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>()
        for (POIXMLDocumentPart dr : sheet.getRelations()) { 
            if (dr instanceof XSSFDrawing) { 
                XSSFDrawing drawing = (XSSFDrawing) dr; 
                List<XSSFShape> shapes = drawing.getShapes()
                for (XSSFShape shape : shapes) { 
                    XSSFPicture pic = (XSSFPicture) shape; 
                    XSSFClientAnchor anchor = pic.getPreferredSize()
                    CTMarker ctMarker = anchor.getFrom()
                    String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol()
                    sheetIndexPicMap.put(picIndex, pic.getPictureData())
               
            } 
        } 
        return sheetIndexPicMap; 
   

}
TOP

Related Classes of org.jeecgframework.poi.excel.ExcelPublicUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.