直接上代码吧

/*** */
package zhongdian.whh.commonclass;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;/**数据导出Excel* 2018/9/10* @author**/
public class DataToExcel {private DataToExcel(){}/*** 导出Excel* @param response 你懂的* @param excelFile Excel文件* @param fileName 导出的文件名*/public static void export(HttpServletResponse response , HSSFWorkbook excelFile , String fileName) {//写入excel表response.reset();response.setContentType( "application/octet-stream;charset=GBK" );response.setCharacterEncoding("GBK");response.setHeader( "Content-Disposition", "attachment;filename=" + processExcelFilename(fileName) + ".xls" );try {excelFile.write(response.getOutputStream( ));} catch (IOException e) {throw new RuntimeException(e);}}/*** 导出Excel* @param response 你懂的* @param fileName 导出的文件名* @param columnWidth 列宽* @param rowName 表头* @param dataList 数据以List<List<String>>组织*/public static void export(HttpServletResponse response , String fileName , int columnWidth , String sheetName , String[] rowName, List<List<String>> dataList){HSSFWorkbook excelFile = null;try {excelFile = toExcel(excelFile, sheetName, columnWidth, rowName, dataList);} catch (IOException e) {throw new RuntimeException(e);}export(response, excelFile, fileName);}/*** 堆叠转换成Excel文件* @param excelFile 堆叠Excel文件,传null则新建* @param table Table* @param sheetName SheetName* @param columnWidth 列宽* @return 堆叠后的Excel文件* @throws IOException*/public static HSSFWorkbook toExcel(HSSFWorkbook excelFile, String sheetName , int columnWidth, String[] rowName, List<List<String>> dataList) throws IOException{// 声明一个工作薄if (excelFile == null){excelFile = new HSSFWorkbook();}// 生成标题样式@SuppressWarnings("unused")HSSFCellStyle titleStyle = getTitleStyle( excelFile );// 生成标题行样式@SuppressWarnings("unused")HSSFCellStyle titleRowStyle = getRowTitleStyle( excelFile );// 生成数据样式HSSFCellStyle cellRowStyle = getCellStyle( excelFile );//高亮格式HSSFCellStyle styleLight = styleLight(excelFile);int sheetNum = (int)dataList.size()/60000;if(dataList.size()%60000!=0){sheetNum++;}/**合并单元格的例子//表头样式设置HSSFRow row0 = sheet.createRow(0);createMyCells(0,19,row0,titleRowStyle);sheet.addMergedRegion(getMyRegion(0, 2, 0, 0));addMyTitle(row0, 0, "跟进人名称");sheet.addMergedRegion(getMyRegion(0, 2, 1, 1));addMyTitle(row0, 1, "名义欠款金额合计");sheet.addMergedRegion(getMyRegion(0, 0, 2, 7));addMyTitle(row0, 2, "超期欠款");sheet.addMergedRegion(getMyRegion(0, 0, 8, 13));addMyTitle(row0, 8, "超期合同数量");sheet.addMergedRegion(getMyRegion(0, 0, 14, 18));addMyTitle(row0, 14, "超期欠款合同数量");HSSFRow row1 = sheet.createRow(1);createMyCells(0,19,row1,titleRowStyle);sheet.addMergedRegion(getMyRegion(1, 2, 2, 2));addMyTitle(row1, 2, "超期欠款金额合计");sheet.addMergedRegion(getMyRegion(1, 1, 3, 7));addMyTitle(row1, 3, "超期时间/月");sheet.addMergedRegion(getMyRegion(1, 2, 8, 8));addMyTitle(row1, 8, "超期合同数量合计");sheet.addMergedRegion(getMyRegion(1, 1, 9, 13));addMyTitle(row1, 9, "超期时间/月");sheet.addMergedRegion(getMyRegion(1, 2, 14, 14));addMyTitle(row1, 14, "1万以下");sheet.addMergedRegion(getMyRegion(1, 2, 15, 15));addMyTitle(row1, 15, "1万至5万");sheet.addMergedRegion(getMyRegion(1, 2, 16, 16));addMyTitle(row1, 16, "5万至10万");sheet.addMergedRegion(getMyRegion(1, 2, 17, 17));addMyTitle(row1, 17, "10万至30万");sheet.addMergedRegion(getMyRegion(1, 2, 18, 18));addMyTitle(row1, 18, "30万以上");*/for(int k = 0; k < sheetNum; k++){//创建一个sheetHSSFSheet sheet = excelFile.createSheet();excelFile.setSheetName(excelFile.getNumberOfSheets() - 1, sheetName+k+"",(short)1); sheet.setDefaultColumnWidth((short) (columnWidth));//Build Excelif(rowName!=null && rowName.length>0) {//设置表头int columnNum = rowName.length;HSSFRow rowRowName = sheet.createRow(0);                // 在索引0的位置创建行// 将列头设置到sheet的单元格中for(int n=0;n<columnNum;n++){HSSFCell  cellRowName = rowRowName.createCell((short)n);//创建列头对应个数的单元格cellRowName.setEncoding( HSSFCell.ENCODING_UTF_16 );cellRowName.setCellType( HSSFCell.CELL_TYPE_STRING );cellRowName.setCellValue(rowName[n]);//设置列头单元格的值cellRowName.setCellStyle(titleRowStyle);}}int rowIndex = 1;for(int index = k * 60000; index < dataList.size(); index++){List<String> dl = dataList.get(index);HSSFRow row = sheet.createRow(rowIndex);HSSFCellStyle cellstyle = cellRowStyle;if(rowIndex%2==1){cellstyle = styleLight;}for(int i = 0; i < dl.size(); i++) {addCell_whh(row, cellstyle,  dl.get(i), i);}rowIndex++;}}return excelFile;}private static Region getMyRegion(int rf,int rt,int cf,int ct){Region region = new Region(); region.setRowFrom(rf);region.setRowTo(rt);region.setColumnFrom((short) cf);region.setColumnTo((short) ct);return region;}private static void createMyCells(int from,int to,HSSFRow rowRowName, HSSFCellStyle titleRowStyle){for(int i = from; i < to; i++){HSSFCell  cellRowName = rowRowName.createCell((short)i);cellRowName.setEncoding( HSSFCell.ENCODING_UTF_16 );cellRowName.setCellType( HSSFCell.CELL_TYPE_STRING );cellRowName.setCellStyle(titleRowStyle);}}public static void addCell_whh(HSSFRow row, HSSFCellStyle cellstyle,  String text, int n){HSSFCell cell = row.createCell((short)n);cell.setCellStyle(cellstyle);cell.setEncoding( HSSFCell.ENCODING_UTF_16 );cell.setCellType( HSSFCell.CELL_TYPE_STRING );cell.setCellValue(text);}/*** 生成标题样式* @param workbook* @return*/public static HSSFCellStyle getTitleStyle(HSSFWorkbook workbook){HSSFCellStyle style = workbook.createCellStyle();// 设置这些样式style.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);style.setBottomBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setRightBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setLeftBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setTopBorderColor(HSSFColor.GREY_50_PERCENT.index);// 生成一个字体HSSFFont font = workbook.createFont();font.setColor(HSSFColor.VIOLET.index);font.setFontHeightInPoints((short) 12);font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 把字体应用到当前的样式style.setFont(font);return style;}/*** 生成行标题样式* @param workbook* @return*/public static HSSFCellStyle getRowTitleStyle(HSSFWorkbook workbook){HSSFCellStyle style = workbook.createCellStyle();// 设置这些样式style.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);style.setBottomBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setRightBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setLeftBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setTopBorderColor(HSSFColor.GREY_50_PERCENT.index);// 生成一个字体HSSFFont font = workbook.createFont();
//        font.setColor(HSSFColor.VIOLET.index);font.setFontHeightInPoints((short) 10);font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 把字体应用到当前的样式style.setFont(font);return style;}/*** 生成数据样式* @param workbook* @return*/public static HSSFCellStyle getCellStyle(HSSFWorkbook workbook){HSSFCellStyle style = workbook.createCellStyle();style.setFillForegroundColor(HSSFColor.WHITE.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style.setBottomBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setRightBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setLeftBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setTopBorderColor(HSSFColor.GREY_50_PERCENT.index);// 生成另一个字体HSSFFont font = workbook.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 把字体应用到当前的样式style.setFont(font);return style;}/*** 高亮格式* @param workbook* @return*/public static HSSFCellStyle styleLight(HSSFWorkbook workbook){HSSFCellStyle style = workbook.createCellStyle();style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);//HSSFColor.SKY_BLUE;style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style.setBottomBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setRightBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setLeftBorderColor(HSSFColor.GREY_50_PERCENT.index);style.setTopBorderColor(HSSFColor.GREY_50_PERCENT.index);// 生成另一个字体HSSFFont font = workbook.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 把字体应用到当前的样式style.setFont(font);return style;}/*** 预处理导出文件名* @param str* @return*/public static String processExcelFilename(String str){try {return java.net.URLEncoder.encode(str, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return "No Name";}/*** @param args*/public static void main(String[] args) {// TODO 自动生成的方法存根List<List<String>> dataList = new ArrayList<List<String>>();System.out.println((int)100/6000);}}

  

转载于:https://www.cnblogs.com/interesting-whh/p/11096930.html

java实现数据的Excel导出(合并单元格、样式等)相关推荐

  1. java实现excel导出合并单元格

    随着数据的不断增长,很多时候需要将数据导出到Excel中进行分析.处理和展示.而Java作为一种流行的编程语言,自然也提供了很多实现Excel导出的方法.本文将介绍如何使用Java实现Excel导出, ...

  2. JAVA EXCEL导出合并单元格自定义封装方法

    转载在C站上面看到一个大神写的自定义封装方法 转载地址:springboot 使用Poi 自定义封装方法 合并excel中的单元格_Tongyao-CSDN博客_springboot合并单元格 之前都 ...

  3. 为什么不居中(CellRangeAddress),关于excel导出合并单元格

    一.最近做一个导出excel需求,按理说很简单,但是发现写公共方法的哥们儿并没有搞合并单元格,而且也不太熟悉他的那种写法,所以简单研究了下,和大家讨论,至少思路千万条,越想越明了. 1.之前的写法简单 ...

  4. 用XSSFWorkbook导出合并单元格样式的excel表格

    1.先从数据库获取将要导出的数据 2.建立一个表格 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.cre ...

  5. java 复杂表头excel导出合并单元格

    easyexcel-wraper easyexcel-wraper是什么? 一个方便读取excel内容,且可以使用注解进行内容验证的包装工具 用到alibaba 2.1.4版本 定义导出excel复杂 ...

  6. Java最牛教材!javaexcel合并单元格样式

    并发模型和分布式系统很相似 并发模型其实和分布式系统模型非常相似,在并发模型中是线程彼此进行通信,而在分布式系统模型中是 进程 彼此进行通信.然而本质上,进程和线程也非常相似.这也就是为什么并发模型和 ...

  7. Java 利用hutool工具实现导出excel并合并单元格

    Java 利用hutool工具实现导出excel并合并单元格 controller层调用service,就一个核心方法,没错就下面这个代码就能实现了.前提是项目里面要引用hutool包.把我这个复制到 ...

  8. Springboot导出excel,合并单元格示例

    原文链接:Springboot导出excel,合并单元格示例 更多文章,欢迎访问:Java知音,一个专注于技术分享的网站 以下用一个示例来说明springboot如何导出数据到excel. 首先引入M ...

  9. java实现数据的Excel导出, 自定义导出字段, 转换字典值

    java实现数据的Excel导出, 自定义导出字段, 转换字典值 第一版代码: 基础功能跳转此文章java自定义Excel导出工具: 简介 新增功能: 添加自定义字段导出功能, 用户可以选择字段进行导 ...

  10. java基于HuTool工具类ExcelWriter合并单元格

    ** java基于HuTool工具类ExcelWriter合并单元格 ** 1.基于HuTool工具类ExcelWriter合并单元格并且使用 jdk1.8 lambda表达式 效果如下: 用姓名和编 ...

最新文章

  1. Python 笔试面试及常用技巧 (1)
  2. 使用卷积神经网络的自动心电图诊断
  3. 机器学习各领域必读经典综述
  4. transform: scale(x,y)
  5. 调整CentOS的文字登陆界面的分辨率
  6. 转 关于 D3D的 SetRenderState 以及AlphaBlend 和AlphaTest
  7. 编程之美-求二进制数中1的个数方法整理
  8. C# 数据的加密解密
  9. Flex入门的好书——《Flex3 Cookbook 中文版》
  10. Python 爬虫 —— 文件及文件夹操作
  11. Linux部署采集小说源码教程,杰奇linux下远程采集,最新思路及方法
  12. Http的会话跟踪和跨站攻击(xss)
  13. 硬件设计3---什么是电容?
  14. Java中对象属性的初始化顺序
  15. 智慧水务信息化系统的意义
  16. Vmware vSphere Cisco IOS XRv 9000安装
  17. 知识汇总:Python办公自动化应该学习哪些内容
  18. 港口数字化转型不能盲目跟风
  19. 1.1 命题逻辑 笔记
  20. 计算机一级经验分享,计算机一级考试经验

热门文章

  1. SpringBoot整合Dubbo案例
  2. 什么是真正的程序员:A Little Printf Story
  3. server2008R2WSUS管理之 计算机管理
  4. 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 3
  5. 苹果商店近期审核的问题
  6. 由内鬼事件看企业的内部安全威胁
  7. 搭建Open××× Server路由模式、证书认证
  8. 13.业务层的事务操作
  9. java运行时内存模型
  10. rocketmq4.x快速入门指南