Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

basedemo.md 9.1 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. ---------------------------
  2. EasyPoi 文档
  3. ---------------------------
  4. 这几篇是旧的教程,不过和现在大同小异
  5. [Excel 介绍篇](http://note.youdao.com/share/?id=ea5166076313d437abbfb28a18d85486&type=note)
  6. [Excel 工具类](http://note.youdao.com/share/?id=dcfef5355d1d75b718be8fd563ad5216&type=note)
  7. [Excel 注解介绍.第一篇](http://note.youdao.com/share/?id=9898d1777ca97b81d82a6e151b880dbb&type=note)
  8. [Excel 注解介绍.第二篇](http://note.youdao.com/share/?id=9898d1777ca97b81d82a6e151b880dbb&type=note)
  9. [Excel 实体类](http://note.youdao.com/share/?id=dab97eababf8e91356f87be204b581e8&type=note)
  10. [Word模板导出教程](http://note.youdao.com/share/?id=26794c8eb4a285828663178c0ae854a2&type=note)
  11. 后面都是新的了
  12. [EasyPoi-在财务报表中的应用](http://git.oschina.net/jueyue/easypoi/wikis/EasyPoi-%E5%9C%A8%E8%B4%A2%E5%8A%A1%E6%8A%A5%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8)
  13. [EasyPoi-如何筛选导出属性](http://git.oschina.net/jueyue/easypoi/wikis/EasyPoi-%E5%A6%82%E4%BD%95%E7%AD%9B%E9%80%89%E5%AF%BC%E5%87%BA%E5%B1%9E%E6%80%A7)
  14. [EasyPoi 在spring mvc中简易开发方式](http://note.youdao.com/share/?id=8b04c4d88a0574a59aeaffd142c8e34b&type=note)
  15. [EasyPoi-新版自定义导出样式类型](http://note.youdao.com/share/?id=7937a9fe15f1016b8f39bf813be894f8&type=note)
  16. [EasyPoi-标签-模板导出的语法介绍](http://blog.csdn.net/qjueyue/article/details/45231801)
  17. [EasyPoi-Excel预览(New)](http://blog.afterturn.cn/?p=34)
  18. [EasyPoi-多行模板输出(New)](http://blog.afterturn.cn/?p=40)
  19. [EasyPoi-校验集成](http://blog.afterturn.cn/?p=65)
  20. --------------------------
  21. EasyPoi 模板 表达式支持
  22. --------------------------
  23. - 空格分割
  24. - 三目运算 {{test ? obj:obj2}}
  25. - n: 表示 这个cell是数值类型 {{n:}}
  26. - le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
  27. - fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
  28. - fn: 格式化数字 {{fn:(obj;###.00)}}
  29. - fe: 遍历数据,创建row
  30. - !fe: 遍历数据不创建row
  31. - $fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
  32. - !if: 删除当前列 {{!if:(test)}}
  33. - 单引号表示常量值 '' 比如'1' 那么输出的就是 1
  34. - &NULL& 控制
  35. - ]] 换行符
  36. ---------------------------
  37. EasyPoi导出实例
  38. ---------------------------
  39. 1.注解,导入导出都是基于注解的,实体上做上注解,标示导出对象,同时可以做一些操作
  40. ```Java
  41. @ExcelTarget("courseEntity")
  42. public class CourseEntity implements java.io.Serializable {
  43. /** 主键 */
  44. private String id;
  45. /** 课程名称 */
  46. @Excel(name = "课程名称", orderNum = "1", needMerge = true)
  47. private String name;
  48. /** 老师主键 */
  49. @ExcelEntity(id = "yuwen")
  50. @ExcelVerify()
  51. private TeacherEntity teacher;
  52. /** 老师主键 */
  53. @ExcelEntity(id = "shuxue")
  54. private TeacherEntity shuxueteacher;
  55. @ExcelCollection(name = "选课学生", orderNum = "4")
  56. private List<StudentEntity> students;
  57. ```
  58. 2.基础导出
  59. 传入导出参数,导出对象,以及对象列表即可完成导出
  60. ```Java
  61. HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams(
  62. "2412312", "测试", "测试"), CourseEntity.class, list);
  63. ```
  64. 3.基础导出,带有索引
  65. 在到处参数设置一个值,就可以在导出列增加索引
  66. ```Java
  67. ExportParams params = new ExportParams("2412312", "测试", "测试");
  68. params.setAddIndex(true);
  69. HSSFWorkbook workbook = ExcelExportUtil.exportExcel(params,
  70. TeacherEntity.class, telist);
  71. ```
  72. 4.导出Map
  73. 创建类似注解的集合,即可完成Map的导出,略有麻烦
  74. ```Java
  75. List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
  76. entity.add(new ExcelExportEntity("姓名", "name"));
  77. entity.add(new ExcelExportEntity("性别", "sex"));
  78. List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  79. Map<String, String> map;
  80. for (int i = 0; i < 10; i++) {
  81. map = new HashMap<String, String>();
  82. map.put("name", "1" + i);
  83. map.put("sex", "2" + i);
  84. list.add(map);
  85. }
  86. HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams(
  87. "测试", "测试"), entity, list);
  88. ```
  89. 5.模板导出
  90. 根据模板配置,完成对应导出
  91. ```Java
  92. TemplateExportParams params = new TemplateExportParams();
  93. params.setHeadingRows(2);
  94. params.setHeadingStartRow(2);
  95. Map<String,Object> map = new HashMap<String, Object>();
  96. map.put("year", "2013");
  97. map.put("sunCourses", list.size());
  98. Map<String,Object> obj = new HashMap<String, Object>();
  99. map.put("obj", obj);
  100. obj.put("name", list.size());
  101. params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls");
  102. Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list,
  103. map);
  104. ```
  105. 6.导入
  106. 设置导入参数,传入文件或者流,即可获得相应的list
  107. ```Java
  108. ImportParams params = new ImportParams();
  109. params.setTitleRows(2);
  110. params.setHeadRows(2);
  111. //params.setSheetNum(9);
  112. params.setNeedSave(true);
  113. long start = new Date().getTime();
  114. List<CourseEntity> list = ExcelImportUtil.importExcel(new File(
  115. "d:/tt.xls"), CourseEntity.class, params);
  116. ```
  117. 7.和spring mvc的无缝融合
  118. 简单几句话,Excel导出搞定
  119. ```Java
  120. @RequestMapping(params = "exportXls")
  121. public String exportXls(CourseEntity course,HttpServletRequest request,HttpServletResponse response
  122. , DataGrid dataGrid,ModelMap map) {
  123. CriteriaQuery cq = new CriteriaQuery(CourseEntity.class, dataGrid);
  124. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, course, request.getParameterMap());
  125. List<CourseEntity> courses = this.courseService.getListByCriteriaQuery(cq,false);
  126. map.put(NormalExcelConstants.FILE_NAME,"用户信息");
  127. map.put(NormalExcelConstants.CLASS,CourseEntity.class);
  128. map.put(NormalExcelConstants.PARAMS,new ExportParams("课程列表", "导出人:Jeecg",
  129. "导出信息"));
  130. map.put(NormalExcelConstants.DATA_LIST,courses);
  131. return NormalExcelConstants.JEECG_EXCEL_VIEW;
  132. }
  133. ```
  134. 8.Excel导入校验,过滤不符合规则的数据,追加错误信息到Excel,提供常用的校验规则,已经通用的校验接口
  135. ```Java
  136. @Excel(name = "Email", width = 25)
  137. @Max(value = 15,message = "max 最大值不能超过15")
  138. private int email;
  139. /**
  140. * 手机号
  141. */
  142. @Excel(name = "Mobile", width = 20)
  143. @NotNull
  144. private String mobile;
  145. ExcelImportResult<ExcelVerifyEntity> result = ExcelImportUtil.importExcelVerify(new File(
  146. "d:/tt.xls"), ExcelVerifyEntity.class, params);
  147. for (int i = 0; i < result.getList().size(); i++) {
  148. System.out.println(ReflectionToStringBuilder.toString(result.getList().get(i)));
  149. }
  150. ```
  151. 9.导入Map
  152. 设置导入参数,传入文件或者流,即可获得相应的list,自定义Key,需要实现IExcelDataHandler接口
  153. ```Java
  154. ImportParams params = new ImportParams();
  155. List<Map<String,Object>> list = ExcelImportUtil.importExcel(new File(
  156. "d:/tt.xls"), Map.class, params);
  157. ```
  158. 10.大数据量Excel导出
  159. exportBigExcel 的方法 ,最后可以关闭closeExportBigExcel 也可以不关闭
  160. 11.如果View不起作用,已经发现被其他View处理掉的情况,使用下面这个,进行了统一封装,相同的效果
  161. ```Java
  162. PoiBaseView
  163. public static void render(Map<String, Object> model, HttpServletRequest request,
  164. HttpServletResponse response, String viewName) {
  165. PoiBaseView view = null;
  166. if (BigExcelConstants.BIG_EXCEL_VIEW.equals(viewName)) {
  167. view = new BigExcelExportView();
  168. } else if (MapExcelConstants.JEECG_MAP_EXCEL_VIEW.equals(viewName)) {
  169. view = new JeecgMapExcelView();
  170. } else if (NormalExcelConstants.JEECG_EXCEL_VIEW.equals(viewName)) {
  171. view = new JeecgSingleExcelView();
  172. } else if (TemplateExcelConstants.JEECG_TEMPLATE_EXCEL_VIEW.equals(viewName)) {
  173. view = new JeecgTemplateExcelView();
  174. } else if (MapExcelGraphConstants.MAP_GRAPH_EXCEL_VIEW.equals(viewName)) {
  175. view = new MapGraphExcelView();
  176. }
  177. try {
  178. view.renderMergedOutputModel(model, request, response);
  179. } catch (Exception e) {
  180. LOGGER.error(e.getMessage(), e);
  181. }
  182. }
  183. // Demo
  184. @RequestMapping(params = "exportXls")
  185. public void exportXls(CourseEntity course,HttpServletRequest request,HttpServletResponse response
  186. , DataGrid dataGrid,ModelMap map) {
  187. CriteriaQuery cq = new CriteriaQuery(CourseEntity.class, dataGrid);
  188. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, course, request.getParameterMap());
  189. List<CourseEntity> courses = this.courseService.getListByCriteriaQuery(cq,false);
  190. map.put(NormalExcelConstants.FILE_NAME,"用户信息");
  191. map.put(NormalExcelConstants.CLASS,CourseEntity.class);
  192. map.put(NormalExcelConstants.PARAMS,new ExportParams("课程列表", "导出人:Jeecg",
  193. "导出信息"));
  194. map.put(NormalExcelConstants.DATA_LIST,courses);
  195. PoiBaseView.render(map,request,response,NormalExcelConstants.JEECG_EXCEL_VIEW);
  196. }
  197. ```