java使用poi自定义excel标题头并导出(springmvc+poi)

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

1 前台请求地址:
2 <t:dgToolBar title="导出" icon="icon-putout" funname="ExportXls"></t:dgToolBar>
3 //导出
4 function ExportXls() {
5     JeecgExcelExport("hAqscTieupsummaryController.do?exportEXL","hAqscTieupsummaryList");
6 }

excel导出模版如下:

原文地址:https://www.cnblogs.com/lfyu/p/8318201.html

时间: 2024-08-29 21:12:02

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

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

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

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

POI是Apache的一套读MS文档的API,用它还是可以比较方便的读取Office文档的.目前支持Word,Excel,PowerPoint生成的文档,还有Visio和Publisher的. http://poi.apache.org/download.html 具体的用法可以查阅文档里面您的quickguide,我给出我自己的范例,从xls文件把数据导出到MySQL. 这里面我总是假定excel在第一个sheet并且第一行是字段名,能够自动从第一行读取字段名建立一个表然后导入数据. pack

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

关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.ThreadLocalMap以当前ThreadLocal为key进行存储,设置一次变量,则其他线程也会有上次数据的残留,因此在addMergeArea方法中进行清空的操作.为了保证原子性, 采用ReentrantLock确保一次只有一个线程可以进行添加合并数据的操作. 线程安全性从以上两个方面保证. 水

poi操作Excel工具类

在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完成的功能是:读取Excel.写入Excel.合并Excel的功能.

POI 操作Excel 异常org.apache.poi.openxml4j.exceptions.invalidformatexception: package should contain a c

POI 操作Excel 出现如下异常 org.apache.poi.openxml4j.exceptions.invalidformatexception: package should contain a content type part 代码如下 public boolean parseToExcel(String oldFileName,String newFileName){ Map<Object,Object> map = new HashMap<Object,Object&

Java中用Apache POI生成excel和word文档

概述: 最近在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能,最后决定用Apache POI来完成该项功能.本文就项目实现过程中的一些思路与代码与大家共享,同时,也作为自己的一个总结,以备后用. 功能: 1.从数据库查询数据导出为excel: 2.导出word的包括,内容有文字,图片,表格等. 效果: 导出excel 导出word 实现代码: 1.导出excel package beans.excel; import java.io.FileOutputStream;

java 利用 poi 生成 Excel文件的例子

在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 1. 生成 Excel 文档. 2. 保护生成Excel文档,设置密码访问. 3. 自动对生成的Excel 文档第一行标题栏设置成filter 过滤形式, 方便用户使用. 用 apache  POI 生成 Excel 文档公用类  程序代码 package com.yihaomen.poi.sampl

Java使用 POI 操作Excel

Java中常见的用来操作 Excel 的方式有2种:JXL和POI.JXL只能对 Excel进行操作,且只支持到 Excel 95-2000的版本.而POI是Apache 的开源项目,由Java编写的跨平台 Java API,可操作 Microsoft Office.借助POI,可以方便的生成数据报表,数据批量上传,数据备份等工作. 一.简单使用 1.创建Maven工程导入POI坐标 <!-- poi 相关 --> <dependency> <groupId>org.a

Java通过POI技术操作Excel(3)----数据导出

在之前的博客中,总结了Excel模板生成和Excel数据录入,然后剩最后一个模块,数据库中数据读取,在之前的基础上我们来看这一模块,应该已经非常容易了,接下来简单的介绍一下: 这里我们仍然以jsp+servlet为例,对SqlServer2005数据库进行操作,如下都是基本步骤: 1.连接数据库:2.根据sql语句获取数据库中值:3.将值进行导出操作: 首先,我们来记性数据库的连接,这个相信接触过java的人都不会陌生,我就不赘述了 1 public class DataBase { 2 pri