根据公司业务需求,导出复杂格式的Excel表格,主要是单元格的合并。

效果图如下:

标题、表头、内容样式

具体根据各自业务需求对参数进行调整

   /*** 创建标题样式** @param wb* @return*/private static HSSFCellStyle createTitleCellStyle(HSSFWorkbook wb) {HSSFCellStyle cellStyle = wb.createCellStyle();//水平居中cellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直对齐cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//背景颜色cellStyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());// 创建字体样式HSSFFont headerFont1 = (HSSFFont) wb.createFont();//字体加粗headerFont1.setBold(true);// 设置字体类型headerFont1.setFontName("黑体");// 设置字体大小headerFont1.setFontHeightInPoints((short) 15);// 为标题样式设置字体样式cellStyle.setFont(headerFont1);return cellStyle;}
/*** 创建表头样式** @param wb* @return*/private static HSSFCellStyle createHeadCellStyle(HSSFWorkbook wb) {HSSFCellStyle cellStyle = wb.createCellStyle();// 设置自动换行cellStyle.setWrapText(true);//背景颜色cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//水平居中cellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直对齐cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);cellStyle.setBottomBorderColor(IndexedColors.BLACK.index);//下边框cellStyle.setBorderBottom(BorderStyle.THIN);//左边框cellStyle.setBorderLeft(BorderStyle.THIN);//右边框cellStyle.setBorderRight(BorderStyle.THIN);//上边框cellStyle.setBorderTop(BorderStyle.THIN);// 创建字体样式HSSFFont headerFont = (HSSFFont) wb.createFont();//字体加粗headerFont.setBold(true);// 设置字体类型headerFont.setFontName("黑体");// 设置字体大小headerFont.setFontHeightInPoints((short) 12);// 为标题样式设置字体样式cellStyle.setFont(headerFont);return cellStyle;}

具体实现

 /** 第一步,创建一个Workbook,对应一个Excel文件  */HSSFWorkbook wb = new HSSFWorkbook();/** 第二步,在Workbook中添加一个sheet,对应Excel文件中的sheet  */HSSFSheet sheet = wb.createSheet("excel导出标题");/** 第三步,设置样式以及字体样式*/HSSFCellStyle titleStyle = createTitleCellStyle(wb);HSSFCellStyle headerStyle = createHeadCellStyle(wb);HSSFCellStyle contentStyle = createContentCellStyle(wb);/** 第四步,创建标题 ,合并标题单元格 */// 行号int rowNum = 0;// 创建第一页的第一行,索引从0开始HSSFRow row0 = sheet.createRow(rowNum++);row0.setHeight((short) 800);// 设置行高String title = "标题名";HSSFCell c00 = row0.createCell(0);c00.setCellValue(title);c00.setCellStyle(titleStyle);// 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)//标题合并单元格操作,7为总列数sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 7));// 第二行HSSFRow row1 = sheet.createRow(rowNum++);row1.setHeight((short) 500);sheet.setColumnWidth(0, (short) 5000);sheet.setColumnWidth(1, (short) 5000);sheet.setColumnWidth(2, (short) 5000);sheet.setColumnWidth(3, (short) 5000);sheet.setColumnWidth(4, (short) 5000);sheet.setColumnWidth(5, (short) 5000);sheet.setColumnWidth(6, (short) 5000);sheet.setColumnWidth(7, (short) 5000);//第二行表头名称 String[] row_first = {"", "", "", "", "", "", "", ""};for (int i = 0; i < row_first.length; i++) {HSSFCell tempCell = row1.createCell(i);tempCell.setCellStyle(headerStyle);tempCell.setCellValue(row_first[i]);}//查询出来的数据 直接调用查询接口  List<Query> retrieve = exportExcelService.getList();//加多一条listfor (Query excelData : retrieve) {HSSFRow tempRow = sheet.createRow(rowNum++);tempRow.setHeight((short) 500);// 循环单元格填入数据for (int j = 0; j < 8; j++) {HSSFCell tempCell = tempRow.createCell(j);tempCell.setCellStyle(contentStyle);String tempValue;if (j == 0) {//get对应的字段名称 tempValue = excelData.getConstructionUnit();} else if (j == 1) {tempValue = excelData.getTarget();} else if (j == 2) {tempValue = excelData.getSuccessesNumber().toString();} else if (j == 3) {tempValue = excelData.getCompletedNumber().toString();} else if (j == 4) {tempValue = excelData.getCompletionRate();} else if (j == 5) {tempValue = excelData.getWhetherPublishList();} else if (j == 6) {tempValue = excelData.getAdministrativeDistrict();} else {tempValue = excelData.getEconomicInformationTarget().toString();}tempCell.setCellValue(tempValue);}}//根据业务需求对单元格进行合并   参数依次为起始行,结束行,起始列,结束列 (索引0开始)sheet.addMergedRegion(new CellRangeAddress(8, 10, 0, 0));sheet.addMergedRegion(new CellRangeAddress(8, 10, 2, 2));sheet.addMergedRegion(new CellRangeAddress(8, 10, 3, 3));sheet.addMergedRegion(new CellRangeAddress(8, 10, 4, 4));sheet.addMergedRegion(new CellRangeAddress(12, 13, 0, 0));sheet.addMergedRegion(new CellRangeAddress(12, 13, 2, 2));sheet.addMergedRegion(new CellRangeAddress(12, 13, 3, 3));sheet.addMergedRegion(new CellRangeAddress(12, 13, 4, 4));sheet.addMergedRegion(new CellRangeAddress(7, 8, 6, 6));sheet.addMergedRegion(new CellRangeAddress(7, 8, 7, 7));sheet.addMergedRegion(new CellRangeAddress(10, 12, 6, 6));sheet.addMergedRegion(new CellRangeAddress(10, 12, 7, 7));String nowMonthDate = DateTimeUtil.getNowMonthDate();String fileName = "表名" + nowMonthDate + ".xls";try {fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");response.setHeader("Content-disposition", "attachment;filename=\"" + fileName + "\"");OutputStream stream = response.getOutputStream();if (null != wb && null != stream) {wb.write(stream);// 将数据写出去wb.close();stream.close();}} catch (Exception e) {e.printStackTrace();}

Java实现复杂excel格式导出相关推荐

  1. Java代码实现Excel表格导出

    Java代码实现Excel表格导出 public static ResponseEntity<byte[]> employee2Excel(List<Employee> lis ...

  2. Java poi 实现excel导入导出工具类

    最近项目上又要大量的涉及excel导入导出,网上各种导入导出的方式层出不穷,我是比较青睐官方的poi,但是要自己去操作工作簿对象自己一行一行的读取,会有很多的重复代码,重复劳动,也极为不美观,基于合成 ...

  3. JAVA简单实现Excel导入/导出 以及excel样式设置!

    POI的 下载 与安装   请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-20 ...

  4. GridView直接以excel格式导出到客户端

    注意excel里格式的问题,如0开头的会自动去掉,长数字会用科学记数法表示(不管你的数据是什么类型的).解决的方法代码里都包含了. .aspx: <%@ Page Language=" ...

  5. java下载文件excel格式错乱,excel获取文件表格数据格式化-excel表格里的文件突然格式全部乱了,怎么恢复?...

    JAVA实现EXCEL表格文件(.xls格式)的读取.修改.... 在excel中,找打开按钮,选择文件格式为 .csv的,然后选择你要导入的CSV文件,会自动弹出文本导入向导,选择数据的分隔符,可以 ...

  6. 前端使用xlsx、file-saver实现自定义excel格式导出(列宽、字体、边框、行高)

    前端使用xlsx.file-saver实现excel导出 前端使用xlsx.file-saver实现excel导出 1.下载依赖 2.在需要导出excel的页面使用依赖 3.实现导出excel文件功能 ...

  7. 使用layui把数据以Excel格式导出

    昨天领导让我给页面加一个数据导出, 开始我以为是本页导出,我就加一个layui自带的,结果告诉我不行,要导出所有的数据,而且不是页面展示的那个表格的,我就试试 引入layui的JS和CSS就不说了直接 ...

  8. js导出excel单元格内换行符代码_如何使用php以excel格式导出带换行符的值?

    我使用PHPExcel将数据从我的数据库导出到excel文件 . 到目前为止它完美无缺 . 我的问题是我有一个字符串值,我想在换行符中分隔,但必须包含在1个单元格中 . 我怎样才能做到这一点?我已成功 ...

  9. excel格式导出合并单元格

    1.首先看一下,我们导出的模板: 可以看到,导出的模板需要合并单元格,其中在每个项目中工程编号是唯一的,所以需求中有一点,我们必选按照:项目名称+工程编号,作为唯一性来做每个sheet的区分.下面看代 ...

最新文章

  1. 如何使用canvas绘图
  2. 学python的好处-python语言的优点和缺点
  3. SQL SERVER 中如何用脚本管理作业
  4. 编写原生的Node.js模块
  5. kali利用msf工具对ms08-067漏洞入侵靶机(win xp2)
  6. MYSQL性能优化(转)
  7. 信息学奥赛一本通(1152:最大数max(x,y,z))
  8. linux环境nginx-1.10.3安装
  9. Etcd超全解:原理阐释及部署设置的最佳实践
  10. 2015年自然语言处理实证方法会议(EMNLP)简介
  11. Windows 环境搭建Redis集群之无脑教程
  12. Fibonacci数列的递推C语言详解:Fn=Fn-1+Fn-2
  13. JMeter 远程启动报错:java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
  14. 每日总结-05-23
  15. 郭天祥六年非一般的大学--哈尔滨工程大学学生
  16. 数组数据结构的使用与代码编写(一)
  17. 【HTML+CSS】01.品优购首页制作——快捷导航shortcut制作
  18. Android富文本编辑器附源码
  19. kettle连接sqlserver报错
  20. ADI demo PL工程的编译-以adrv9371x_zc706为例子

热门文章

  1. 数据分析-最常用4种分析方法
  2. 视频分析(MATLAB)——MV分镜头图像分类
  3. 0x00405cad指令引用的“0x00000000”内存。该内存不能为“read”
  4. 云产品--游戏加速云产品(已过期)
  5. 国外导师对博士后申请简历的几点建议
  6. 1024程序员节|代码改变世界,科技创造未来~ 机械工业出版社送福利,好书相赠~
  7. 微信公众号支付--3--接收微信支付异步通知
  8. 学生信息的那些操作:(2)按学号,查个人
  9. 强化学习笔记:连续控制 确定策略梯度DPG
  10. shell学习训练总结_7