项目使用的是jeecg开源框架(springmvc+spring+hibernate+。。。。。。等)此代码仅供参考!如有更好的意见或建议可留言。
创建excel大致分这几步:
1、创建HSSFWorkbook对象(也就是excel文档对象) 2、通过HSSFWorkbook对象创建sheet对象(也就是excel中的sheet) 3、通过sheet对象创建HSSFROW对象(row行对象)
4、通过HSSFROW对象创建列cell并set值(列名)
controller 层 /**
* excel自定义导出
* @param hAqscTieupsummary
* @param request
* @param response
* @param dataGrid
* @param modelMap
* @return
*/
@SuppressWarnings("deprecation")
@RequestMapping(params = "exportEXL")
public String exportEXL(HAqscTieupsummaryEntity hAqscTieupsummary,
HttpServletRequest request, HttpServletResponse response,
DataGrid dataGrid, ModelMap modelMap) {
try {
String dateType = "yyyy";
SimpleDateFormat df = new SimpleDateFormat(dateType);// 设置日期格式
SimpleDateFormat df1 = new SimpleDateFormat("yyyy.MM.dd");// 设置日期格式
// 创建HSSFWorkbook对象(excel的文档对象)
HSSFWorkbook wb = new HSSFWorkbook();
HSSFRow row = null;
HSSFCell cell = null;
// 建立新的sheet对象(excel的表单) 并设置sheet名字
HSSFSheet sheet = wb.createSheet("占压管线台账信息");
sheet.setDefaultRowHeightInPoints(30);// 设置缺省列高sheet.setDefaultColumnWidth(20);//设置缺省列宽
//----------------标题样式---------------------
HSSFCellStyle titleStyle = wb.createCellStyle(); //标题样式
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
Font ztFont = wb.createFont();
ztFont.setItalic(false); // 设置字体为斜体字
ztFont.setColor(Font.COLOR_NORMAL); // 将字体设置为“红色”
ztFont.setFontHeightInPoints((short)16); // 将字体大小设置为18px
ztFont.setFontName("宋体"); // 将“宋体”字体应用到当前单元格上
ztFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗
// ztFont.setUnderline(Font.U_DOUBLE); // 添加(Font.U_SINGLE单条下划线/Font.U_DOUBLE双条下划线)
// ztFont.setStrikeout(true); // 是否添加删除线
titleStyle.setFont(ztFont);
//-------------------------------------------
//----------------二级标题格样式----------------------------------
HSSFCellStyle titleStyle2 = wb.createCellStyle(); //表格样式
titleStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
titleStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
Font ztFont2 = wb.createFont();
ztFont2.setItalic(false); // 设置字体为斜体字
ztFont2.setColor(Font.COLOR_NORMAL); // 将字体设置为“红色”
ztFont2.setFontHeightInPoints((short)11); // 将字体大小设置为18px
ztFont2.setFontName("宋体"); // 字体应用到当前单元格上
ztFont2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗
// ztFont.setUnderline(Font.U_DOUBLE); // 添加(Font.U_SINGLE单条下划线/Font.U_DOUBLE双条下划线)
// ztFont.setStrikeout(true); // 是否添加删除线
titleStyle2.setFont(ztFont2);
//----------------------------------------------------------
//----------------单元格样式----------------------------------
HSSFCellStyle cellStyle = wb.createCellStyle(); //表格样式
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
Font cellFont = wb.createFont();
cellFont.setItalic(false); // 设置字体为斜体字
cellFont.setColor(Font.COLOR_NORMAL); // 将字体设置为“红色”
cellFont.setFontHeightInPoints((short)10); // 将字体大小设置为18px
cellFont.setFontName("宋体"); // 字体应用到当前单元格上
// cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
cellStyle.setFont(cellFont);
cellStyle.setWrapText(true);//设置自动换行
//----------------------------------------------------------
// ----------------------创建第一行---------------
// 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
row = sheet.createRow(0);
// 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
cell = row.createCell(0);
// 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 19));
// 设置单元格内容
cell.setCellValue("占压城市地下管线、输油气管道、化工产品管道违法违规建设汇总表");
cell.setCellStyle(titleStyle);
// ---------------------------------------------- // ------------------创建第二行(单位、填表日期)---------------------
row = sheet.createRow(1); // 创建第二行
cell = row.createCell(0);
cell.setCellValue("填报单位名称(盖章): ");
cell.setCellStyle(titleStyle2);
sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 3));
cell = row.createCell(4);
sheet.addMergedRegion(new CellRangeAddress(1, 1, 4, 5));
TSBaseUser tb = ResourceUtil.getSessionUserName(); //获取当前登录用户信息
String uid = tb.getId();
String deptId = userDao.getDeptId(uid);
String deptName = userDao.getDeptName(deptId);
cell.setCellValue(deptName);
// cell.setCellValue("*****");
cell.setCellStyle(titleStyle2);
cell = row.createCell(13); // 填表时间
sheet.addMergedRegion(new CellRangeAddress(1, 1, 13, 16));
cell.setCellValue("填表时间:"+df1.format(new Date()));
cell.setCellStyle(titleStyle2);
// HSSFCell cell14 = row.createCell(15); // 填表时间
// cell14.setCellValue();
// cell14.setCellValue("2017.11.30");
// cell14.setCellStyle(titleStyle2);
// ---------------------------------------------- // ------------------创建表头start---------------------
row = sheet.createRow(2); // 创建第三行
sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 0));
cell = row.createCell(0);
cell.setCellValue("序号");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 1));
cell = row.createCell(1);
cell.setCellValue("隐患等级评定");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 3, 2, 2));
cell = row.createCell(2);
cell.setCellValue("隐患名称");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 2, 3, 5));
cell = row.createCell(3);
cell.setCellValue("位置描述");
cell.setCellStyle(cellStyle); cell = row.createCell(4);
cell.setCellStyle(cellStyle);
cell = row.createCell(5);
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 2, 6, 10));
cell = row.createCell(6);
cell.setCellValue("管线情况");
cell.setCellStyle(cellStyle); cell = row.createCell(7);
cell.setCellStyle(cellStyle);
cell = row.createCell(8);
cell.setCellStyle(cellStyle);
cell = row.createCell(9);
cell.setCellStyle(cellStyle);
cell = row.createCell(10);
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 2, 11, 13));
cell = row.createCell(11);
cell.setCellValue("占压物情况");
cell.setCellStyle(cellStyle); cell = row.createCell(12);
cell.setCellStyle(cellStyle);
cell = row.createCell(13);
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 2, 14, 14));
cell = row.createCell(14);
cell.setCellValue("占压物用途");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 3, 15, 15));
cell = row.createCell(15);
cell.setCellValue("已采用的安全防护措施");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 3, 16, 16));
cell = row.createCell(16);
cell.setCellValue("备注");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 3, 17, 17));
cell = row.createCell(17);
cell.setCellValue("联系人电话");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 3, 18, 18));
cell = row.createCell(18);
cell.setCellValue("是否已和区管委和供热办联系");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(2, 3, 19, 19));
cell = row.createCell(19);
cell.setCellValue("是否采取防范措施");
cell.setCellStyle(cellStyle); //--------------------------- 创建第四行--------------------
row = sheet.createRow(3);
sheet.addMergedRegion(new CellRangeAddress(3, 3, 3, 3));
cell = row.createCell(3);
cell.setCellValue("所在区县");
cell.setCellStyle(cellStyle); cell = row.createCell(0);
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 4, 4));
cell = row.createCell(4);
cell.setCellValue("所在街道");
cell.setCellStyle(cellStyle); cell = row.createCell(1);
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 5, 5));
cell = row.createCell(5);
cell.setCellValue("详细地址");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 6, 6));
cell = row.createCell(6);
cell.setCellValue("管线建成时间");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 7, 7));
cell = row.createCell(7);
cell.setCellValue("管线埋深");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 8, 8));
cell = row.createCell(8);
cell.setCellValue("管径");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 9, 9));
cell = row.createCell(9);
cell.setCellValue("管线压力等级");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 10, 10));
cell = row.createCell(10);
cell.setCellValue("占压管线长度");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 11, 11));
cell = row.createCell(11);
cell.setCellValue("占压单位(个人)名称");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 12, 12));
cell = row.createCell(12);
cell.setCellValue("占压物建成时间");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 13, 13));
cell = row.createCell(13);
cell.setCellValue("占压物面积(平方米)");
cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(3, 3, 14, 14));
cell = row.createCell(14);
cell.setCellValue("经营、出租、自用、居住");
cell.setCellStyle(cellStyle); cell = row.createCell(15);
cell.setCellStyle(cellStyle);
cell = row.createCell(16);
cell.setCellStyle(cellStyle);
cell = row.createCell(17);
cell.setCellStyle(cellStyle);
cell = row.createCell(18);
cell.setCellStyle(cellStyle);
cell = row.createCell(19);
cell.setCellStyle(cellStyle);
//-------------------------表头end---------------------
CriteriaQuery cq = new CriteriaQuery(HAqscTieupsummaryEntity.class,
dataGrid);
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq,
hAqscTieupsummary, request.getParameterMap());
List<HAqscTieupsummaryEntity> hAqscTieupsummarys = this.hAqscTieupsummaryService
.getListByCriteriaQuery(cq, false);
for (int i = 0; i < hAqscTieupsummarys.size(); i++) { //向表格插入数据
List<Object> data = new ArrayList<>(); //将前台传来的数据存入到list中
// System.out.println(hAqscTieupsummarys.get(i).getSeqNum());
HAqscTieupsummaryEntity entity = hAqscTieupsummarys.get(i);
data.add(entity.getSeqNum());
String yhjb = entity.getYhDjpd();
String hyjb = dao.getHyjb(yhjb);
data.add(hyjb); //隐患级别
data.add(entity.getYhName());
String countryName = dao.getCountryByCode(entity.getAtcounty()); //区县
data.add(countryName);
String code = entity.getAtdistrict();
String streetName = dao.getStreetByCode(code); //街道
data.add(streetName);
data.add(entity.getAddress());
Date buildtime = entity.getPipelineBuildtime();
if (buildtime!=null) {
String format = df.format(buildtime);
data.add(format);
}else{
data.add("");
}
data.add(entity.getPipelineDepth());
data.add(entity.getPipeSize());
data.add(entity.getPipelinePr());
data.add(entity.getTppipelineLength());
data.add(entity.getTieupName());
Date goodsBuildtime = entity.getTieupgoodsBuildtime();
if (buildtime!=null) {
String format = df.format(goodsBuildtime);
data.add(format);
}else{
data.add("");
}
data.add(entity.getTieupgoodsArea());
String useType = entity.getTieupgoodsUse();
data.add(dao.getUseType(useType));
data.add(entity.getUseSecuritymeasures());
data.add(entity.getRemark());
data.add(entity.getTelephone());
data.add(dao.getIsContact(entity.getIsContact()));
data.add(entity.getIsUsesecuritymeasures());
int rowNum = 4+i; //从第四行开始
row = sheet.createRow(rowNum);
for (int j = 0; j < data.size(); j++) { //将数据添加到单元格中
// System.out.println(data.get(j));
sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, j, j));
cell = row.createCell(j);
cell.setCellValue(""+data.get(j)+"");
cell.setCellStyle(cellStyle);
}
} // 输出Excel文件
OutputStream output = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition",
"attachment; filename=details.xls"); //filename = 文件名
response.setContentType("application/msexcel");
wb.write(output);
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
 前台请求地址:
<t:dgToolBar title="导出" icon="icon-putout" funname="ExportXls"></t:dgToolBar>
//导出
function ExportXls() {
JeecgExcelExport("hAqscTieupsummaryController.do?exportEXL","hAqscTieupsummaryList");
}

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. .NET 对 XML 进行创建,增加,删除,修改操作整理

    前言: 最近做了一个项目,程序A在一个服务器程序B在另一台服务器,然而主程序A需要访问程序B的图片集文件夹下载到本服务器上,为了防止多次对Web Services进行调用,在主程序A中创建一个XML文 ...

  2. Asp.Net Web API中使用Session,Cache和Application的几个方法

    在ASP.NET中,Web Api的控制器类派生于ApiController,该类与ASP.NET的Control类没有直接关系,因此不能像在Web MVC中直接使用HttpContext,Cache ...

  3. JavaWeb之ssm框架整合,用户角色权限管理

    SSM框架整合 Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspectwea ...

  4. ES6对象及ES6对象简单拓展

    ES6对象和传统的JS比较起来支持简写,比如说属性简写方法简写,还支持name属性,可以通过他迅速得到函数属性名表达式(如果是用bind方法创造的函数name属性会返回bound加上原函数的名字,Fu ...

  5. [array] leetcode - 39. Combination Sum - Medium

    leetcode - 39. Combination Sum - Medium descrition Given a set of candidate numbers (C) (without dup ...

  6. 每周.NET前沿技术文章摘要(2017-06-21)

    汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容: .NET .NET Core Magic: Develop on one OS, run on another 链接:https: ...

  7. mysql 证明为什么用limit时,offset很大会影响性能

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/117 首先说明一下MySQL的版本: mysql> sel ...

  8. 599. Minimum Index Sum of Two Lists

    Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite ...

  9. 基于阿里云的MQTT远程控制

    好久没有写博客了,眼看自己的项目就要快做完了,先分享一下基于MQTT的远程控制,自己买了一个阿里的云端,然后在云端上安装了一个MQTT服务器,其实是一不小心买了两个,所以准备贡献出来一个供大家使用, ...

  10. MySql监控优化

    MySQL监控   MySQL服务器硬件和OS(操作系统)调优:   1.有足够的物理内存,能将整个InnoDB文件加载到内存里 —— 如果访问的文件在内存里,而不是在磁盘上,InnoDB会快很多. ...