1、导入

  1. @Override
  2. public String importBusinessScope(File file, String unit_id) throws Exception {
  3. Workbook wb = Workbook.getWorkbook(file);// 从文件流中取得Excel工作区对象
  4. Sheet sheet = wb.getSheet(0);
  5.  
  6. Range[] rangeCell = sheet.getMergedCells();// 合并单元格
  7.  
  8. StringBuilder validateMessage = new StringBuilder();
  9. BusinessScopeItem businessScopeItem = null;
  10. BusinessScopeSubItem businessScopeSubItem = null;
  11. List<BusinessScopeSubItem> businessScopeSubItemList = new ArrayList<>();
  12. for (int i = 4; i < sheet.getRows(); i++) {
  13. businessScopeItem = new BusinessScopeItem();
  14. businessScopeSubItem = new BusinessScopeSubItem();
  15. // 事项
  16. String item_id = "";
  17. String item = sheet.getCell(1, i).getContents();
  18. for (Range r : rangeCell) {
  19. if (i > r.getTopLeft().getRow() && i <= r.getBottomRight().getRow() && 1 >= r.getTopLeft().getColumn()
  20. && 1 <= r.getBottomRight().getColumn()) {
  21. item = sheet.getCell(r.getTopLeft().getColumn(), r.getTopLeft().getRow()).getContents();
  22. }
  23. }
  24. businessScopeItem.setItem(item);
  25. businessScopeItem.setIsdel("0");
  26. List<BusinessScopeItem> businessScopeItemList = businessScopeItemDao.selectAllItemList(businessScopeItem);
  27. if (businessScopeItemList != null && businessScopeItemList.size() > 0) {
  28. item_id = businessScopeItemList.get(0).getItem_id();
  29. } else {
  30. businessScopeItem.setUnit_id(unit_id);
  31. businessScopeItem.setCreatedate(DateTime.toLocaleStringYYYYMMDD());
  32. item_id = businessScopeItemDao.insertItem(businessScopeItem);
  33. }
  34.  
  35. // 子事项
  36. String subitem = sheet.getCell(2, i).getContents();
  37. for (Range r : rangeCell) {
  38. if (i > r.getTopLeft().getRow() && i <= r.getBottomRight().getRow() && 2 >= r.getTopLeft().getColumn()
  39. && 2 <= r.getBottomRight().getColumn()) {
  40. subitem = sheet.getCell(r.getTopLeft().getColumn(), r.getTopLeft().getRow()).getContents();
  41. }
  42. }
  43. businessScopeSubItem.setItem_id(item_id);
  44. businessScopeSubItem.setSubitem(subitem);
  45. businessScopeSubItem.setIsdel("0");
  46. int count = businessScopeSubItemDao.selectCountSubItemByItemAndSubItem(businessScopeSubItem);
  47. if (count > 0) {
  48. validateMessage.append("第").append(i + 1).append("行,事项(").append(item).append(")和子事项(").append(subitem)
  49. .append(")已存在;");
  50. } else {
  51. businessScopeSubItem.setItem(item);
  52. }
  53.  
  54. // 主要内容
  55. String content = sheet.getCell(3, i).getContents();
  56. for (Range r : rangeCell) {
  57. if (i > r.getTopLeft().getRow() && i <= r.getBottomRight().getRow() && 3 >= r.getTopLeft().getColumn()
  58. && 3 <= r.getBottomRight().getColumn()) {
  59. content = sheet.getCell(r.getTopLeft().getColumn(), r.getTopLeft().getRow()).getContents();
  60. }
  61. }
  62. businessScopeSubItem.setContent(content);
  63.  
  64. // 实施依据
  65. String rules = sheet.getCell(4, i).getContents();
  66. for (Range r : rangeCell) {
  67. if (i > r.getTopLeft().getRow() && i <= r.getBottomRight().getRow() && 4 >= r.getTopLeft().getColumn()
  68. && 4 <= r.getBottomRight().getColumn()) {
  69. rules = sheet.getCell(r.getTopLeft().getColumn(), r.getTopLeft().getRow()).getContents();
  70. }
  71. }
  72. businessScopeSubItem.setRules(rules);
  73.  
  74. // 实施期限
  75. String limitdate = sheet.getCell(5, i).getContents();
  76. for (Range r : rangeCell) {
  77. if (i > r.getTopLeft().getRow() && i <= r.getBottomRight().getRow() && 5 >= r.getTopLeft().getColumn()
  78. && 5 <= r.getBottomRight().getColumn()) {
  79. limitdate = sheet.getCell(r.getTopLeft().getColumn(), r.getTopLeft().getRow()).getContents();
  80. }
  81. }
  82. businessScopeSubItem.setLimitdate(limitdate);
  83.  
  84. // 创建日期
  85. businessScopeSubItem.setCreatedate(DateTime.toLocaleStringYYYYMMDD());
  86. businessScopeSubItemList.add(businessScopeSubItem);
  87. }
  88. wb.close();
  89.  
  90. if (validateMessage.length() > 0) {
  91. return validateMessage.toString();
  92. } else {
  93. for (BusinessScopeSubItem subItem : businessScopeSubItemList) {
  94. businessScopeSubItemDao.insertSubItem(subItem);
  95. }
  96. }
  97.  
  98. return "0";
  99. }

2、导出

  1. @Override
  2. public String exportBusinessScope(BusinessScopeItem businessScopeItem, HttpServletResponse response)
  3. throws Exception {
  4. // 获取导出数据
  5. List<BusinessScopeItem> businessScopeItemList = businessScopeItemDao.selectAllBusinessScopeList(businessScopeItem);
  6. if (businessScopeItemList != null && businessScopeItemList.size() > 0) {
  7. // 模板入径
  8. String templePath = getClass().getResource("/").getPath();
  9. int index = templePath.indexOf("WebContent");
  10. templePath = templePath.substring(0, index + 10) + "/website/enroll/businessscope/businessScopeModel.xls";
  11.  
  12. // 读取模板文件
  13. Workbook wb = Workbook.getWorkbook(new File(templePath));
  14. // 取得输出流
  15. OutputStream os = response.getOutputStream();
  16. // 清空输出流
  17. response.reset();
  18. // 下面是对中文文件名的处理,设置相应内容的编码格式
  19. response.setCharacterEncoding("UTF-8");
  20. // 设置文件的默认文件名
  21. response.setHeader("Content-Disposition", "attachment;filename=businessScopeModel.xls");
  22. // 定义输出类型
  23. response.setContentType("application/msexcel");
  24. // 建立Excel文件
  25. WritableWorkbook book = Workbook.createWorkbook(os, wb);
  26. // 通过索引,获取模板文件中的sheet页第一页
  27. WritableSheet sheet = book.getSheet(0);
  28. // 实例化表格格式
  29. // 设置单元格纵横居中
  30. WritableCellFormat wcfCenter = new WritableCellFormat();
  31. wcfCenter.setAlignment(Alignment.CENTRE);
  32. wcfCenter.setVerticalAlignment(VerticalAlignment.CENTRE);
  33. // 是否自动换行
  34. wcfCenter.setWrap(true);
  35. // 设置表格线为细线,黑色
  36. wcfCenter.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
  37.  
  38. // 设置单元格水平靠左,上下居中
  39. WritableCellFormat wcfLeft = new WritableCellFormat();
  40. wcfLeft.setAlignment(Alignment.LEFT);
  41. wcfLeft.setVerticalAlignment(VerticalAlignment.CENTRE);
  42. // 是否自动换行
  43. wcfLeft.setWrap(true);
  44. // 设置表格线为细线,黑色
  45. wcfLeft.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
  46.  
  47. // 写入Excel
  48. int i = 4;
  49. int seq = 0;
  50. for (BusinessScopeItem item : businessScopeItemList) {
  51. List<BusinessScopeSubItem> businessScopeSubItemList = item.getBusinessScopeSubItemList();
  52. int subItemCount = 0;
  53. if (businessScopeSubItemList != null && businessScopeSubItemList.size() > 0) {
  54. subItemCount = businessScopeSubItemList.size() -1;
  55. }
  56. // 是否需要合并单元格
  57. if (subItemCount > 0) {
  58. // 设置第1列、第4行到第1列、第subItemCount行合并
  59. sheet.mergeCells(0, i, 0, i + subItemCount);
  60. sheet.mergeCells(1, i, 1, i + subItemCount);
  61. }
  62.  
  63. // 序号
  64. seq++;
  65. // 实例化单元格内容,并应用样式对单元格进行处理
  66. Label label_Seq = new Label(0, i, String.valueOf(seq), wcfCenter);
  67. // 将内容添加入单元格中
  68. sheet.addCell(label_Seq);
  69.  
  70. // 事项
  71. Label label_item = new Label(1, i, item.getItem(), wcfCenter);
  72. sheet.addCell(label_item);
  73.  
  74. // 子事项相关信息
  75. if (businessScopeSubItemList != null) {
  76. int j = i;
  77. for (BusinessScopeSubItem subItem : businessScopeSubItemList) {
  78. // 子事项
  79. Label label_subitem = new Label(2, j, subItem.getSubitem(), wcfCenter);
  80. sheet.addCell(label_subitem);
  81.  
  82. // 主要内容
  83. Label label_content = new Label(3, j, subItem.getContent(), wcfLeft);
  84. sheet.addCell(label_content);
  85.  
  86. // 实施依据
  87. Label label_rules = new Label(4, j, subItem.getRules(), wcfLeft);
  88. sheet.addCell(label_rules);
  89.  
  90. // 实施期限
  91. Label label_limitdate = new Label(5, j, subItem.getLimitdate(), wcfCenter);
  92. sheet.addCell(label_limitdate);
  93.  
  94. // 重定向行
  95. j++;
  96. }
  97. }
  98.  
  99. // 重定向行
  100. i += subItemCount + 1;
  101. }
  102.  
  103. // 尾部
  104. // 设置行高
  105. sheet.setRowView(i, 1500, false);
  106. // 合并单元格
  107. sheet.mergeCells(0, i, 1, i);
  108. sheet.mergeCells(2, i, 5, i);
  109. // 填充数据
  110. Label label_bottom1 = new Label(0, i, "举办单位审核意见", wcfCenter);
  111. sheet.addCell(label_bottom1);
  112.  
  113. // 设置单元格水平靠右,垂直靠下
  114. WritableCellFormat wcfBottom = new WritableCellFormat();
  115. wcfBottom.setAlignment(Alignment.RIGHT);
  116. wcfBottom.setVerticalAlignment(VerticalAlignment.BOTTOM);
  117. // 是否自动换行
  118. wcfBottom.setWrap(true);
  119. // 设置表格线为细线,黑色
  120. wcfBottom.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
  121.  
  122. Calendar calendar = Calendar.getInstance();
  123. String year = String.valueOf(calendar.get(Calendar.YEAR));
  124. Label label_bottom2 = new Label(2, i, "(公章) \r\n" + year + "年 月 日 \r\n", wcfBottom);
  125. sheet.addCell(label_bottom2);
  126.  
  127. book.write();// 写入表格
  128. book.close();// 结束表格编写
  129. os.close();// 关闭数据流
  130. } else {
  131. return "没有数据!";
  132. }
  133. return "0";
  134. }

jxl 导入导出Excel(有模板)的更多相关文章

  1. jxl导入/导出excel

    1.jxl导入/导出excel案例,黏贴即可运行 package junit.test; import java.io.File; import java.io.IOException; import ...

  2. jxl导入/导出excel(网上的案例)

    jxl导入/导出excel 1.jxl导入/导出excel案例,黏贴即可运行 package junit.test; import java.io.File; import java.io.IOExc ...

  3. 1、jxl导入/导出excel案例,黏贴即可运行

    package junit.test; import java.io.File; import java.io.IOException; import java.util.ArrayList; imp ...

  4. java struts jxl 导入导出Excel(无模板)

    jar包: import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.io.Fil ...

  5. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  6. 导入导出Excel的Java工具类ExcelUtil

    在编写ExcelUtil之前,在网上查了一些资料.java中用来处理Excel的第三方开源项目主要就是POI和JXL.poi功能强大,但是比较耗资源,对于大数据量的导入导出性能不是太好:jxl功能简单 ...

  7. 导入导出Excel文件

    搭建环境 先新建web project ,然后Add Struts Capabilties: 下载导入导出Excel所需的jar包: poi-3.8-20120326.jar包  :  http:// ...

  8. Java基于注解和反射导入导出Excel

    代码地址如下:http://www.demodashi.com/demo/11995.html 1. 构建项目 使用Spring Boot快速构建一个Web工程,并导入与操作Excel相关的POI包以 ...

  9. EasyPOI导入导出Excel

    EasyPOI工具可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 导入maven依赖 <dependency> <group ...

随机推荐

  1. Web页面使用VLC播放插件

    一.原生态Demo下载 选择原因:我们为什么选择VLC播放插件?原因是它支持IE8浏览器播放视频,如果高版本的浏览器大可不必选择该插件,很多html5插件既好用又简单,但是有些交管或政府 部门还是限制 ...

  2. NHibernate系列学习(一)-看看用NH怎么做增速改查

    1.本次所有代码是在一下环境下运行的 学习系统:win8 64bit 开发环境:VS2013,MSSQL2012 NHibernate版本:NHibernate-4.0.3.GA [文章结尾有本次笔记 ...

  3. PDO访问其他数据库操作及作用

    PDO的作用 PDO<!--数据访问抽象层--><!--1.可以访问其他数据库--><!--2.具有事务功能--><!--3.带有预处理语句功能(防止SQL注 ...

  4. 移动web——bootstrap如何修改原组件

    基本介绍 1.bootstrap提供了丰富的组件,但是有时候我们不仅要删除不必要的标签,还需要修改里面的样式 2.我们建议若是修改样式那么最好将源样式从css中拷贝出来,名字换掉,然后修改具体样式,这 ...

  5. C# call Win32 api时,-1如何转换为DWORD

    当使用(uint)-1时,编译器会给出警告:常量-1无法转换为uint,使用unchecked语句重写.DWORD在转换为C#类型时为uint,既然无法使用uint强制转型(-1),那就需要其他办法了 ...

  6. UIResponder详解

    UIResponder Class Reference Managing the Responder Chain 1.- (UIResponder *)nextResponder 返回接收者的下一个相 ...

  7. linux调试环境时常用的命令 及 常识

    1.查找文件或文件夹 所在的目录 sudo find / -name your_filename 示例: wangju@wangju-HP--G4:~$ sudo find / -name .jenk ...

  8. demo__image_loader

    环境 webpack4.x 文件结构 │ package.json │ webpack.config.js │ yarn.lock │ ├─dist │ 1f871aa58.png │ bundle. ...

  9. jq购物车结算功能

    css *{font-style: normal} .gw{margin: 8px;} .gw::after{display: block;clear: both;content: '';margin ...

  10. 模态框(layer)

    推荐一个好看的模态框(layer)   地址:http://layer.layui.com/ 相应列子及配置  全部来自于官网,可直接访问官网学习了解. //信息框-例1 layer.alert('见 ...