poi导出excel工具类
来源:互联网 发布:优道网络骗局揭秘 编辑:程序博客网 时间:2024/05/21 15:44
poi版本
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version></dependency>
/** * Excel导出工具类 * @author zsc * @datetime 2017年12月14日 下午8:01:32 */public class ExcelUtil {// 将需要的单元格式样式放到Map集合中,使用时直接从Map中获取,如果在使用时创建,那当数据量很大时严重影响性能public static ThreadLocal<Map<String, XSSFCellStyle>> styles = new ThreadLocal<>();/** 构造方法私有,禁止用户new对象 */private ExcelUtil() {super();}/** * 导出工作簿,将工作簿写响应(response)输出流实现浏览器下载 * @param response * @param workbook * @param fileName * @throws Exception */public static void exportExcel(HttpServletResponse response, XSSFWorkbook workbook, String fileName) throws Exception {OutputStream os = null;try {os = response.getOutputStream();response.reset(); response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls"); response.setContentType("application/msexcel");workbook.write(os);} finally {if(null != workbook) {workbook.close();}if(null != os) {os.flush();os.close();}}}/** * 创建工作簿 * @param sheetNames * @param headNames * @param titles * @param contents * @return * @throws Exception */public static XSSFWorkbook createExcel(String[] sheetNames, String[] headNames, List<String[]> titles, List<List<Object[]>> contents) throws Exception {XSSFWorkbook workbook = new XSSFWorkbook();int sheetCount = sheetNames.length;XSSFSheet sheet = null;String headName = "";for(int i = 0; i < sheetCount; i++) {sheet = workbook.createSheet(sheetNames[i]);headName = (null != headNames && StringUtils.isNotBlank(headNames[i])) ? headNames[i] : sheetNames[i];createExcel(workbook, sheet, headName, titles.get(i), contents.get(i));}return workbook;}public static XSSFWorkbook createExcel(String sheetName, String headName, String[] titles, List<Object[]> contents) throws Exception {XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet(sheetName);createExcel(workbook, sheet, headName, titles, contents);return workbook;}/** * 创建工作簿 * @param workbook 导出工作簿 * @param sheet 导出工作表 * @param titles 标题列表 * @param contents 数据列表 * @throws Exception */public static void createExcel(XSSFWorkbook workbook, XSSFSheet sheet, String[] titles, List<Object[]> contents) throws Exception {createExcel(workbook, sheet, sheet.getSheetName(), titles, contents);}/** * 导出Excel * @param os 输出流 * @param workbook 导出工作簿 * @param sheet 导出工作表 * @param headName 表头名 * @param titles 标题列表 * @param contents 数据列表 * @throws Exception */public static void createExcel(XSSFWorkbook workbook, XSSFSheet sheet, String headName, String[] titles, List<Object[]> contents) throws Exception {try {if(null == contents || contents.size() <= 0) {return;}// 创建单元格式样式集合styles.set(styleMap(workbook));// 创建工作表头createSheetHead(workbook, sheet, titles, headName);// 填充工作表数据createSheetData(sheet, contents, 2);} finally {if(null != styles.get()) {styles.get().clear();}styles.remove();}}/** * 构建sheet表头 * @param sheet * @param heads */private static void createSheetHead(XSSFWorkbook workbook, XSSFSheet sheet, String[] heads, String headName) {sheet.createFreezePane(0, 2, 0, 2);// 冻结前2行sheet.setDefaultColumnWidth((short) 20);// 设置表格默认列宽度为20个字节XSSFCellStyle tilteStyle = styles.get().get("head");XSSFCell cell = null;XSSFRow rowFirst = sheet.createRow(0);// 创建第一行(报表名称)cell = rowFirst.createCell(0);cell.setCellValue(StringUtils.isBlank(headName) ? sheet.getSheetName() : headName);cell.setCellStyle(tilteStyle);sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, heads.length -1));XSSFRow row = sheet.createRow(1);// 创建第二行(列名)if (heads != null && heads.length > 0) {XSSFCellStyle cellStyle = styles.get().get("title");for (int i = 0; i < heads.length; i++) {cell = row.createCell(i);if (heads[i] != null) {cell.setCellValue(heads[i]);cell.setCellStyle(cellStyle);}}}}/** * 构建sheet数据内容 * @param sheet * @param contents * @param index */private static void createSheetData(XSSFSheet sheet, List<Object[]> contents, int index) {XSSFCellStyle contentStyle = ExcelUtil.styles.get().get("content");XSSFCellStyle integerStyle = ExcelUtil.styles.get().get("integer");XSSFCellStyle doubleStyle = ExcelUtil.styles.get().get("double");Iterator<Object[]> it = contents.iterator();Row nextrow;Cell cell2;Object[] obj;// 遍历数据while (it.hasNext()) {nextrow = sheet.createRow(index++);obj = it.next();if (obj != null) {int objLen = obj.length;for (int i = 0; i < objLen; i++) {cell2 = nextrow.createCell(i);if (obj[i] != null) {if(obj[i] instanceof Float || obj[i] instanceof Double || StringUtil.isNumeric1(obj[i].toString())){cell2.setCellValue(Double.parseDouble(obj[i].toString()));cell2.setCellStyle(doubleStyle);}else if(obj[i] instanceof Integer || (obj[i] instanceof Long && obj[i].toString().length() <=10)|| (StringUtil.isNumeric(obj[i].toString()) && obj[i].toString().length() <= 10)){cell2.setCellValue(Integer.parseInt(obj[i].toString()));cell2.setCellStyle(integerStyle);}else{cell2.setCellValue(obj[i].toString());cell2.setCellStyle(contentStyle);}} else {cell2.setCellValue("");cell2.setCellStyle(contentStyle);}}}}}/** * 创建单元格表头样式 * * @param workbook 工作薄 */ private static XSSFCellStyle createCellHeadStyle(XSSFWorkbook workbook) { XSSFCellStyle style = workbook.createCellStyle(); // 设置边框样式 style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); style.setBorderTop(BorderStyle.THIN); //设置对齐样式 style.setAlignment(HorizontalAlignment.CENTER); // 生成字体 XSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 20); font.setBold(true); // 把字体应用到当前的样式 style.setFont(font); return style; } /** * 创建单元格表头标题样式 * * @param workbook 工作薄 */ private static XSSFCellStyle createCellTitleStyle(XSSFWorkbook workbook) { XSSFCellStyle style = workbook.createCellStyle(); // 设置边框样式 style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); style.setBorderTop(BorderStyle.THIN); //设置对齐样式 style.setAlignment(HorizontalAlignment.CENTER); // 生成字体 XSSFFont font = workbook.createFont(); // 表头样式 style.setFillPattern(FillPatternType.SOLID_FOREGROUND); style.setFillForegroundColor(new XSSFColor(Color.CYAN)); font.setBold(true); // 把字体应用到当前的样式 style.setFont(font); return style; } /** * 创建单元格正文样式 * * @param workbook 工作薄 */ private static XSSFCellStyle createCellContentStyle(XSSFWorkbook workbook) { XSSFCellStyle style = workbook.createCellStyle(); // 设置边框样式 style.setBorderBottom(BorderStyle.THIN ); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); style.setBorderTop(BorderStyle.THIN); // 生成字体 XSSFFont font = workbook.createFont(); // 正文样式 style.setVerticalAlignment(VerticalAlignment.CENTER); font.setBold(false); // 把字体应用到当前的样式 style.setFont(font); return style; } /** * 单元格样式(Integer)列表 */ private static XSSFCellStyle createCellContent4IntegerStyle(XSSFWorkbook workbook) { XSSFCellStyle style = workbook.createCellStyle(); // 设置边框样式 style.setBorderBottom(BorderStyle.THIN ); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); style.setBorderTop(BorderStyle.THIN); // 生成字体 XSSFFont font = workbook.createFont(); // 正文样式 style.setVerticalAlignment(VerticalAlignment.CENTER); font.setBold(false); // 把字体应用到当前的样式 style.setFont(font); style.setDataFormat(workbook.createDataFormat().getFormat("#,##0"));//数据格式只显示整数 return style; } /** * 单元格样式(Double)列表 */ private static XSSFCellStyle createCellContent4DoubleStyle(XSSFWorkbook workbook) { XSSFCellStyle style = workbook.createCellStyle(); // 设置边框样式 style.setBorderBottom(BorderStyle.THIN ); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); style.setBorderTop(BorderStyle.THIN); // 生成字体 XSSFFont font = workbook.createFont(); // 正文样式 style.setVerticalAlignment(VerticalAlignment.CENTER); font.setBold(false); // 把字体应用到当前的样式 style.setFont(font); style.setDataFormat(workbook.createDataFormat().getFormat("#,##0.00"));//保留两位小数点 return style; }/** * 单元格样式列表 */ private static Map<String, XSSFCellStyle> styleMap(XSSFWorkbook workbook) { Map<String, XSSFCellStyle> styleMap = new LinkedHashMap<>(); styleMap.put("head", createCellHeadStyle(workbook)); styleMap.put("title", createCellTitleStyle(workbook)); styleMap.put("content", createCellContentStyle(workbook)); styleMap.put("integer", createCellContent4IntegerStyle(workbook)); styleMap.put("double", createCellContent4DoubleStyle(workbook)); return styleMap; }}
阅读全文
0 0
- poi 导出Excel 工具类
- POI导出Excel工具类
- poi导出Excel工具类
- poi导出excel工具类
- POI导出Excel工具
- Excel导出工具-POI
- 利用poi导出excel的工具类
- excel 导入导出 poi工具类
- Poi实现Excel导出工具类封装
- Poi实现Excel导出工具类封装
- POI导出Excel工具类(补充)
- 导出Excel工具类—POI
- poi 导出Excel 使用工具类
- POI实现导出Excel数据工具类
- Apache POI导出Excel工具
- 使用工具类 使用poi导入导出excel报表
- 使用POI插件,提取导出excel的工具类
- POI自定义表头(合并列)导出Excel工具类
- hadoop分布式搭建
- 欧几里得算法
- 澳规插脚测试AS/NZS 3112
- 1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符,怎么办?
- 网络直播能否成为游戏之外的第二大娱乐市场?
- poi导出excel工具类
- JavaScript原型链
- 素数环问题(分支限界法)
- Java--servlet--目录
- 大数据正式27
- leetcode 第5题 Longest Palindromic Substring
- Java调用C语言编写的简单函数库
- Android学习笔记-数据库开发-4:SQLiteDataBase基本用法(1):获取一个SQLiteDataBase
- Python.CVXPY学习指南一