ExcelUtils.java 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package cn.com.qmth.am.utils;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.List;
  7. public abstract class ExcelUtils {
  8. private Class<?> dataClass;
  9. private List<ColumnSetting> columnSettings;
  10. public ExcelUtils(Class<?> dataClass) {
  11. this.dataClass = dataClass;
  12. this.columnSettings = getColumnSettings(dataClass);
  13. }
  14. public Class<?> getDataClass() {
  15. return dataClass;
  16. }
  17. public void setDataClass(Class<?> dataClass) {
  18. this.dataClass = dataClass;
  19. }
  20. public List<ColumnSetting> getColumnSettings() {
  21. return columnSettings;
  22. }
  23. public void setColumnSettings(List<ColumnSetting> columnSettings) {
  24. this.columnSettings = columnSettings;
  25. }
  26. /**
  27. * 提取ExcelProperty注解类的字段信息
  28. *
  29. * @param dataClass
  30. * 需要解析 写入excel的数据类型
  31. * @return
  32. */
  33. protected List<ColumnSetting> getColumnSettings(Class<?> dataClass) {
  34. List<ColumnSetting> columnSettings = new ArrayList<>();
  35. // 先在方法上找ExcelProperty注解
  36. Method[] methods = dataClass.getDeclaredMethods();
  37. for (Method method : methods) {
  38. ExcelProperty exportProperty = method.getAnnotation(ExcelProperty.class);
  39. if (exportProperty != null && exportProperty.name().trim().length() > 0) {
  40. ColumnSetting columnSetting = new ColumnSetting(exportProperty.name(), method.getName(),
  41. exportProperty.width(), exportProperty.index());
  42. columnSettings.add(columnSetting);
  43. }
  44. }
  45. // 如果方法上找不到注解,再到属性上找
  46. if (columnSettings.size() == 0) {
  47. Field[] fields = dataClass.getDeclaredFields();
  48. for (Field field : fields) {
  49. ExcelProperty exportProperty = field.getAnnotation(ExcelProperty.class);
  50. if (exportProperty != null && exportProperty.name().trim().length() > 0) {
  51. ColumnSetting columnSetting = new ColumnSetting(exportProperty.name(),
  52. "get" + toUpperCaseFirstOne(field.getName()), exportProperty.width(),
  53. exportProperty.index());
  54. columnSettings.add(columnSetting);
  55. }
  56. }
  57. }
  58. Collections.sort(columnSettings);
  59. return columnSettings;
  60. }
  61. private static String toUpperCaseFirstOne(String s) {
  62. if (Character.isUpperCase(s.charAt(0)))
  63. return s;
  64. else
  65. return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
  66. }
  67. }