1. 项目使用的是jeecg开源框架(springmvc+spring+hibernate+。。。。。。等)此代码仅供参考!如有更好的意见或建议可留言。
    创建excel大致分这几步:
    1、创建HSSFWorkbook对象(也就是excel文档对象)
  2.  
  3. 2、通过HSSFWorkbook对象创建sheet对象(也就是excel中的sheet
  4.  
  5. 3、通过sheet对象创建HSSFROW对象(row行对象)
  1. 4通过HSSFROW对象创建列cellset值(列名)
    controller
  2. /**
  3. * excel自定义导出
  4. * @param hAqscTieupsummary
  5. * @param request
  6. * @param response
  7. * @param dataGrid
  8. * @param modelMap
  9. * @return
  10. */
  11. @SuppressWarnings("deprecation")
  12. @RequestMapping(params = "exportEXL")
  13. public String exportEXL(HAqscTieupsummaryEntity hAqscTieupsummary,
  14. HttpServletRequest request, HttpServletResponse response,
  15. DataGrid dataGrid, ModelMap modelMap) {
  16. try {
  17. String dateType = "yyyy";
  18. SimpleDateFormat df = new SimpleDateFormat(dateType);// 设置日期格式
  19. SimpleDateFormat df1 = new SimpleDateFormat("yyyy.MM.dd");// 设置日期格式
  20. // 创建HSSFWorkbook对象(excel的文档对象)
  21. HSSFWorkbook wb = new HSSFWorkbook();
  22. HSSFRow row = null;
  23. HSSFCell cell = null;
  24. // 建立新的sheet对象(excel的表单) 并设置sheet名字
  25. HSSFSheet sheet = wb.createSheet("占压管线台账信息");
  26. sheet.setDefaultRowHeightInPoints(30);// 设置缺省列高sheet.setDefaultColumnWidth(20);//设置缺省列宽
  27. //----------------标题样式---------------------
  28. HSSFCellStyle titleStyle = wb.createCellStyle(); //标题样式
  29. titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  30. titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  31. Font ztFont = wb.createFont();
  32. ztFont.setItalic(false); // 设置字体为斜体字
  33. ztFont.setColor(Font.COLOR_NORMAL); // 将字体设置为“红色”
  34. ztFont.setFontHeightInPoints((short)16); // 将字体大小设置为18px
  35. ztFont.setFontName("宋体"); // 将“宋体”字体应用到当前单元格上
  36. ztFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗
  37. // ztFont.setUnderline(Font.U_DOUBLE); // 添加(Font.U_SINGLE单条下划线/Font.U_DOUBLE双条下划线)
  38. // ztFont.setStrikeout(true); // 是否添加删除线
  39. titleStyle.setFont(ztFont);
  40. //-------------------------------------------
  41. //----------------二级标题格样式----------------------------------
  42. HSSFCellStyle titleStyle2 = wb.createCellStyle(); //表格样式
  43. titleStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  44. titleStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  45. Font ztFont2 = wb.createFont();
  46. ztFont2.setItalic(false); // 设置字体为斜体字
  47. ztFont2.setColor(Font.COLOR_NORMAL); // 将字体设置为“红色”
  48. ztFont2.setFontHeightInPoints((short)11); // 将字体大小设置为18px
  49. ztFont2.setFontName("宋体"); // 字体应用到当前单元格上
  50. ztFont2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗
  51. // ztFont.setUnderline(Font.U_DOUBLE); // 添加(Font.U_SINGLE单条下划线/Font.U_DOUBLE双条下划线)
  52. // ztFont.setStrikeout(true); // 是否添加删除线
  53. titleStyle2.setFont(ztFont2);
  54. //----------------------------------------------------------
  55. //----------------单元格样式----------------------------------
  56. HSSFCellStyle cellStyle = wb.createCellStyle(); //表格样式
  57. cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  58. cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  59. cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
  60. cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
  61. cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
  62. cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
  63. Font cellFont = wb.createFont();
  64. cellFont.setItalic(false); // 设置字体为斜体字
  65. cellFont.setColor(Font.COLOR_NORMAL); // 将字体设置为“红色”
  66. cellFont.setFontHeightInPoints((short)10); // 将字体大小设置为18px
  67. cellFont.setFontName("宋体"); // 字体应用到当前单元格上
  68. // cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  69. cellStyle.setFont(cellFont);
  70. cellStyle.setWrapText(true);//设置自动换行
  71. //----------------------------------------------------------
  72. // ----------------------创建第一行---------------
  73. // 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
  74. row = sheet.createRow(0);
  75. // 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
  76. cell = row.createCell(0);
  77. // 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
  78. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 19));
  79. // 设置单元格内容
  80. cell.setCellValue("占压城市地下管线、输油气管道、化工产品管道违法违规建设汇总表");
  81. cell.setCellStyle(titleStyle);
  82. // ----------------------------------------------
  83. // ------------------创建第二行(单位、填表日期)---------------------
  84. row = sheet.createRow(1); // 创建第二行
  85. cell = row.createCell(0);
  86. cell.setCellValue("填报单位名称(盖章): ");
  87. cell.setCellStyle(titleStyle2);
  88. sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 3));
  89. cell = row.createCell(4);
  90. sheet.addMergedRegion(new CellRangeAddress(1, 1, 4, 5));
  91. TSBaseUser tb = ResourceUtil.getSessionUserName(); //获取当前登录用户信息
  92. String uid = tb.getId();
  93. String deptId = userDao.getDeptId(uid);
  94. String deptName = userDao.getDeptName(deptId);
  95. cell.setCellValue(deptName);
  96. // cell.setCellValue("*****");
  97. cell.setCellStyle(titleStyle2);
  98. cell = row.createCell(13); // 填表时间
  99. sheet.addMergedRegion(new CellRangeAddress(1, 1, 13, 16));
  100. cell.setCellValue("填表时间:"+df1.format(new Date()));
  101. cell.setCellStyle(titleStyle2);
  102. // HSSFCell cell14 = row.createCell(15); // 填表时间
  103. // cell14.setCellValue();
  104. // cell14.setCellValue("2017.11.30");
  105. // cell14.setCellStyle(titleStyle2);
  106. // ----------------------------------------------
  107. // ------------------创建表头start---------------------
  108. row = sheet.createRow(2); // 创建第三行
  109. sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 0));
  110. cell = row.createCell(0);
  111. cell.setCellValue("序号");
  112. cell.setCellStyle(cellStyle);
  113. sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 1));
  114. cell = row.createCell(1);
  115. cell.setCellValue("隐患等级评定");
  116. cell.setCellStyle(cellStyle);
  117. sheet.addMergedRegion(new CellRangeAddress(2, 3, 2, 2));
  118. cell = row.createCell(2);
  119. cell.setCellValue("隐患名称");
  120. cell.setCellStyle(cellStyle);
  121. sheet.addMergedRegion(new CellRangeAddress(2, 2, 3, 5));
  122. cell = row.createCell(3);
  123. cell.setCellValue("位置描述");
  124. cell.setCellStyle(cellStyle);
  125. cell = row.createCell(4);
  126. cell.setCellStyle(cellStyle);
  127. cell = row.createCell(5);
  128. cell.setCellStyle(cellStyle);
  129. sheet.addMergedRegion(new CellRangeAddress(2, 2, 6, 10));
  130. cell = row.createCell(6);
  131. cell.setCellValue("管线情况");
  132. cell.setCellStyle(cellStyle);
  133. cell = row.createCell(7);
  134. cell.setCellStyle(cellStyle);
  135. cell = row.createCell(8);
  136. cell.setCellStyle(cellStyle);
  137. cell = row.createCell(9);
  138. cell.setCellStyle(cellStyle);
  139. cell = row.createCell(10);
  140. cell.setCellStyle(cellStyle);
  141. sheet.addMergedRegion(new CellRangeAddress(2, 2, 11, 13));
  142. cell = row.createCell(11);
  143. cell.setCellValue("占压物情况");
  144. cell.setCellStyle(cellStyle);
  145. cell = row.createCell(12);
  146. cell.setCellStyle(cellStyle);
  147. cell = row.createCell(13);
  148. cell.setCellStyle(cellStyle);
  149. sheet.addMergedRegion(new CellRangeAddress(2, 2, 14, 14));
  150. cell = row.createCell(14);
  151. cell.setCellValue("占压物用途");
  152. cell.setCellStyle(cellStyle);
  153. sheet.addMergedRegion(new CellRangeAddress(2, 3, 15, 15));
  154. cell = row.createCell(15);
  155. cell.setCellValue("已采用的安全防护措施");
  156. cell.setCellStyle(cellStyle);
  157. sheet.addMergedRegion(new CellRangeAddress(2, 3, 16, 16));
  158. cell = row.createCell(16);
  159. cell.setCellValue("备注");
  160. cell.setCellStyle(cellStyle);
  161. sheet.addMergedRegion(new CellRangeAddress(2, 3, 17, 17));
  162. cell = row.createCell(17);
  163. cell.setCellValue("联系人电话");
  164. cell.setCellStyle(cellStyle);
  165. sheet.addMergedRegion(new CellRangeAddress(2, 3, 18, 18));
  166. cell = row.createCell(18);
  167. cell.setCellValue("是否已和区管委和供热办联系");
  168. cell.setCellStyle(cellStyle);
  169. sheet.addMergedRegion(new CellRangeAddress(2, 3, 19, 19));
  170. cell = row.createCell(19);
  171. cell.setCellValue("是否采取防范措施");
  172. cell.setCellStyle(cellStyle);
  173. //--------------------------- 创建第四行--------------------
  174. row = sheet.createRow(3);
  175. sheet.addMergedRegion(new CellRangeAddress(3, 3, 3, 3));
  176. cell = row.createCell(3);
  177. cell.setCellValue("所在区县");
  178. cell.setCellStyle(cellStyle);
  179. cell = row.createCell(0);
  180. cell.setCellStyle(cellStyle);
  181. sheet.addMergedRegion(new CellRangeAddress(3, 3, 4, 4));
  182. cell = row.createCell(4);
  183. cell.setCellValue("所在街道");
  184. cell.setCellStyle(cellStyle);
  185. cell = row.createCell(1);
  186. cell.setCellStyle(cellStyle);
  187. sheet.addMergedRegion(new CellRangeAddress(3, 3, 5, 5));
  188. cell = row.createCell(5);
  189. cell.setCellValue("详细地址");
  190. cell.setCellStyle(cellStyle);
  191. sheet.addMergedRegion(new CellRangeAddress(3, 3, 6, 6));
  192. cell = row.createCell(6);
  193. cell.setCellValue("管线建成时间");
  194. cell.setCellStyle(cellStyle);
  195. sheet.addMergedRegion(new CellRangeAddress(3, 3, 7, 7));
  196. cell = row.createCell(7);
  197. cell.setCellValue("管线埋深");
  198. cell.setCellStyle(cellStyle);
  199. sheet.addMergedRegion(new CellRangeAddress(3, 3, 8, 8));
  200. cell = row.createCell(8);
  201. cell.setCellValue("管径");
  202. cell.setCellStyle(cellStyle);
  203. sheet.addMergedRegion(new CellRangeAddress(3, 3, 9, 9));
  204. cell = row.createCell(9);
  205. cell.setCellValue("管线压力等级");
  206. cell.setCellStyle(cellStyle);
  207. sheet.addMergedRegion(new CellRangeAddress(3, 3, 10, 10));
  208. cell = row.createCell(10);
  209. cell.setCellValue("占压管线长度");
  210. cell.setCellStyle(cellStyle);
  211. sheet.addMergedRegion(new CellRangeAddress(3, 3, 11, 11));
  212. cell = row.createCell(11);
  213. cell.setCellValue("占压单位(个人)名称");
  214. cell.setCellStyle(cellStyle);
  215. sheet.addMergedRegion(new CellRangeAddress(3, 3, 12, 12));
  216. cell = row.createCell(12);
  217. cell.setCellValue("占压物建成时间");
  218. cell.setCellStyle(cellStyle);
  219. sheet.addMergedRegion(new CellRangeAddress(3, 3, 13, 13));
  220. cell = row.createCell(13);
  221. cell.setCellValue("占压物面积(平方米)");
  222. cell.setCellStyle(cellStyle);
  223. sheet.addMergedRegion(new CellRangeAddress(3, 3, 14, 14));
  224. cell = row.createCell(14);
  225. cell.setCellValue("经营、出租、自用、居住");
  226. cell.setCellStyle(cellStyle);
  227. cell = row.createCell(15);
  228. cell.setCellStyle(cellStyle);
  229. cell = row.createCell(16);
  230. cell.setCellStyle(cellStyle);
  231. cell = row.createCell(17);
  232. cell.setCellStyle(cellStyle);
  233. cell = row.createCell(18);
  234. cell.setCellStyle(cellStyle);
  235. cell = row.createCell(19);
  236. cell.setCellStyle(cellStyle);
  237. //-------------------------表头end---------------------
  238. CriteriaQuery cq = new CriteriaQuery(HAqscTieupsummaryEntity.class,
  239. dataGrid);
  240. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq,
  241. hAqscTieupsummary, request.getParameterMap());
  242. List<HAqscTieupsummaryEntity> hAqscTieupsummarys = this.hAqscTieupsummaryService
  243. .getListByCriteriaQuery(cq, false);
  244. for (int i = 0; i < hAqscTieupsummarys.size(); i++) { //向表格插入数据
  245. List<Object> data = new ArrayList<>(); //将前台传来的数据存入到list中
  246. // System.out.println(hAqscTieupsummarys.get(i).getSeqNum());
  247. HAqscTieupsummaryEntity entity = hAqscTieupsummarys.get(i);
  248. data.add(entity.getSeqNum());
  249. String yhjb = entity.getYhDjpd();
  250. String hyjb = dao.getHyjb(yhjb);
  251. data.add(hyjb); //隐患级别
  252. data.add(entity.getYhName());
  253. String countryName = dao.getCountryByCode(entity.getAtcounty()); //区县
  254. data.add(countryName);
  255. String code = entity.getAtdistrict();
  256. String streetName = dao.getStreetByCode(code); //街道
  257. data.add(streetName);
  258. data.add(entity.getAddress());
  259. Date buildtime = entity.getPipelineBuildtime();
  260. if (buildtime!=null) {
  261. String format = df.format(buildtime);
  262. data.add(format);
  263. }else{
  264. data.add("");
  265. }
  266. data.add(entity.getPipelineDepth());
  267. data.add(entity.getPipeSize());
  268. data.add(entity.getPipelinePr());
  269. data.add(entity.getTppipelineLength());
  270. data.add(entity.getTieupName());
  271. Date goodsBuildtime = entity.getTieupgoodsBuildtime();
  272. if (buildtime!=null) {
  273. String format = df.format(goodsBuildtime);
  274. data.add(format);
  275. }else{
  276. data.add("");
  277. }
  278. data.add(entity.getTieupgoodsArea());
  279. String useType = entity.getTieupgoodsUse();
  280. data.add(dao.getUseType(useType));
  281. data.add(entity.getUseSecuritymeasures());
  282. data.add(entity.getRemark());
  283. data.add(entity.getTelephone());
  284. data.add(dao.getIsContact(entity.getIsContact()));
  285. data.add(entity.getIsUsesecuritymeasures());
  286. int rowNum = 4+i; //从第四行开始
  287. row = sheet.createRow(rowNum);
  288. for (int j = 0; j < data.size(); j++) { //将数据添加到单元格中
  289. // System.out.println(data.get(j));
  290. sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, j, j));
  291. cell = row.createCell(j);
  292. cell.setCellValue(""+data.get(j)+"");
  293. cell.setCellStyle(cellStyle);
  294. }
  295. }
  296. // 输出Excel文件
  297. OutputStream output = response.getOutputStream();
  298. response.reset();
  299. response.setHeader("Content-disposition",
  300. "attachment; filename=details.xls"); //filename = 文件名
  301. response.setContentType("application/msexcel");
  302. wb.write(output);
  303. output.close();
  304. } catch (IOException e) {
  305. // TODO Auto-generated catch block
  306. e.printStackTrace();
  307. }
  308. return null;
  309. }
  1. 前台请求地址:
  2. <t:dgToolBar title="导出" icon="icon-putout" funname="ExportXls"></t:dgToolBar>
  3. //导出
  4. function ExportXls() {
  5. JeecgExcelExport("hAqscTieupsummaryController.do?exportEXL","hAqscTieupsummaryList");
  6. }

excel导出模版如下:

java使用poi自定义excel标题头并导出(springmvc+poi)的更多相关文章

  1. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  2. 使用JDBC+POI把Excel中的数据导出到MySQL

    POI是Apache的一套读MS文档的API,用它还是可以比较方便的读取Office文档的.目前支持Word,Excel,PowerPoint生成的文档,还有Visio和Publisher的. htt ...

  3. java使用jxl,poi解析excel文件

    public interface JavaExcel { /** * 使用jxl写excel文件 */ public void writeJxlExcel(); /** * 使用jxl读excel文件 ...

  4. 【原创】POI操作Excel导入导出工具类ExcelUtil

    关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...

  5. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  6. 自己的包poi操作Excel工具

    在前面的文章<使用poi读写Excel>中分享了一下poi操作Excel的简单演示样例.这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完毕的功能是:读取Excel.汇总E ...

  7. java通过poi读取excel中的日期类型数据或自定义类型日期

    Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 或 2019-10-12 poi处理excel时,当excel没 ...

  8. JAVA POI替换EXCEL模板中自定义标签(XLSX版本)满足替换多个SHEET中自定义标签

    个人说明:为了简单实现导出数据较少的EXCEL(根据自定义书签模板) 一.替换Excel表格标签方法```/** * 替换Excel模板文件内容 * @param map * 需要替换的标签建筑队形式 ...

  9. 10、借助POI实现Java生成并打印excel报表(1)

    10.1.了解 Apache POI 实际开发中,用到最多的是把数据库中数据导出生成报表,尤其是在生产管理或者财务系统中用的非常普遍.生成报表格式一般是EXCEL或者PDF .利用Apache  PO ...

随机推荐

  1. javaWeb超链接(href)请求-特殊字符处理

    写在前面: 最近在项目中,遇到一个问题,在点击一个超链接时,页面报错.通过浏览器调试就可以知道发送的请求参数是不完整的,因为参数中含有特殊字符.所以就报错啦~~ 原代码,不能正确发送含有特殊字符的参数 ...

  2. 45、SQL逻辑查询语句执行顺序

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

  3. 通过EntityFramework来操作MySQL数据库

    自己首次用到了EF,为了利人利己,故将自己今天学的记录下来. 这个项目要用到的工具是VS2015.MySQL5.7.12 . 首先我们先建一个解决方案,里面建两个项目分别是Silentdoer.Mai ...

  4. 如何在markdown中插入表情

    Markdown是很好用的呀,个人灰常的喜欢,也是灰常漂亮的,但是如何在写文章的时候插入表情呢,下面给出一部分代码

  5. css盒模型研究

    css的盒模型一直是一个重点和难点,最近由后端的学习转到前端,觉得有必要深入研究一下css的盒模型. 1.万物皆盒子 我们必须要有一个理念,在html的世界里,万物皆盒子,那就是任何一个html元素都 ...

  6. lesson - 1 aming

    一.  Linux是什么* 关于Linux历史(http://www.aminglinux.com/bbs/thread-6568-1-1.html  需要大家查查资了解,也可以看看5期的视频)* 发 ...

  7. redis咋么实现分布式锁,redis分布式锁的实现方式,redis做分布式锁 积极正义的少年

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  8. UWP TextBox私人定制

    这次私人定制的是背景透明的TextBox,普通的TextBox在获取焦点后,背景色就变白色了. 下面的代码可以让TextBox的背景始终是透明的. 其实很简单,就修改了 <Setter Prop ...

  9. php+中文分词scws+sphinx+mysql打造千万级数据全文搜索

    转载自:http://blog.csdn.net/nuli888/article/details/51892776 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图 ...

  10. android inline hook

    最近终于沉下心来对着书把hook跟注入方面的代码敲了一遍,打算写几个博客把它们记录下来. 第一次介绍一下我感觉难度最大的inline hook,实现代码参考了腾讯GAD的游戏安全入门. inline ...