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


    项目使用的是jeecg开源框架(springmvc+spring+hibernate+。。。。。。等)此代码仅供参考!如有更好的意见或建议可留言。
    创建excel大致分这几步:
    1、创建HSSFWorkbook对象(也就是excel文档对象)

    2、通过HSSFWorkbook对象创建sheet对象(也就是excel中的sheet)

    3、通过sheet对象创建HSSFROW对象(row行对象)
    4、通过HSSFROW对象创建列cell并set值(列名)
    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 }
    View Code

    excel导出模版如下:

  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/lfyu/p/8318201.html
Copyright © 2020-2023  润新知