自己写的java excel导出工具类
最近项目要用到excel导出功能,之前也写过类似的代码。因为这次项目中多次用到excel导出。这次长了记性整理了一下 分享给大伙
欢迎一起讨论
生成excel的主工具类:
public class ExcelFactory<T> { private static final String EXCEL_FONT_FAMILY_SETTING = "Monaco"; //设置字体 private static final int EXCEL_FONT_SIZE_SETTING = 12; //设置字体大小 private WritableWorkbook writableWorkbook = null; private WritableSheet writableSheet = null; public WritableWorkbook createExcel(OutputStream os, Excel excel, List<String> header, List<T> datas, ExcelMapper<T> mapper) throws RowsExceededException, WriteException { //生成excel try { writableWorkbook = Workbook.createWorkbook(os); writableSheet = writableWorkbook.createSheet(excel.getSheetName(), excel.getSheetNum()); SheetSettings settings = writableSheet.getSettings(); settings.setVerticalFreeze(1); // Write the title if (header != null && header.size() > 0) { for (int i = 0; i < header.size(); i++) { writableSheet.addCell(new Label(i, 0, header.get(i), setHeaderCellStyle(new CellStyle(EXCEL_FONT_FAMILY_SETTING, EXCEL_FONT_SIZE_SETTING)))); } } // Write data to file if (datas != null && datas.size() > 0) { for (int i = 1; i <= datas.size(); i++) { mapper.mapToExcel(writableSheet, datas.get(i - 1), setBodyCellStyle(new CellStyle(EXCEL_FONT_FAMILY_SETTING, EXCEL_FONT_SIZE_SETTING)), i); } } } catch (IOException e) { return null; } return writableWorkbook; } private WritableCellFormat setHeaderCellStyle(CellStyle style) throws WriteException { WritableFont font = new WritableFont( WritableFont.createFont(style.getFont()), style.getFontSize(), WritableFont.BOLD); WritableCellFormat cellFormat = setCentre(style, font); return cellFormat; } private WritableCellFormat setBodyCellStyle(CellStyle style) throws WriteException { WritableFont font = new WritableFont( WritableFont.createFont(style.getFont()), style.getFontSize(), WritableFont.NO_BOLD); WritableCellFormat cellFormat = setCentre(style, font); return cellFormat; } private WritableCellFormat setCentre(CellStyle style, WritableFont font) throws WriteException { WritableCellFormat cellFormat = new WritableCellFormat(font); cellFormat.setBackground(style.getBgColor()); cellFormat.setAlignment(Alignment.CENTRE); cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE); return cellFormat; } }
excel model类:
public class Excel { private String sheetName; private int sheetNum; public Excel() { } public Excel(String sheetName, int sheetNum) { this.sheetName = sheetName; this.sheetNum = sheetNum; } public String getSheetName() { return sheetName; } public void setSheetName(String sheetName) { this.sheetName = sheetName; } public int getSheetNum() { return sheetNum; } public void setSheetNum(int sheetNum) { this.sheetNum = sheetNum; } }
CellStyle的model类:
public class CellStyle { private String font; private int fontSize; private Colour bgColor = Colour.WHITE; public CellStyle() {} public CellStyle(String font, int fontSize) { this.font = font; this.fontSize = fontSize; } public Colour getBgColor() { return bgColor; } public void setBgColor(Colour bgColor) { this.bgColor = bgColor; } public int getFontSize() { return fontSize; } public void setFontSize(int fontSize) { this.fontSize = fontSize; } public String getFont() { return font; } public void setFont(String font) { this.font = font; } }
ExcelMapper的接口类(用于写数据):
public interface ExcelMapper<T> { void mapToExcel(WritableSheet sheet, T t, WritableCellFormat wcf, int rowNum); }
举个例子:
public class FinanceExcelMapper implements ExcelMapper<Finance>{ public void mapToExcel(WritableSheet sheet, Finance finance, WritableCellFormat wcf, int rowNum) { try { sheet.addCell(new Label(0, rowNum, String.valueOf(finance.getStudentCourseId()))); sheet.addCell(new Label(1, rowNum, finance.getCardNum())); sheet.addCell(new Label(2, rowNum, finance.getStuName())); DefaultDictionaryManager manager = DefaultDictionaryManager.getInstance(); sheet.addCell(new Label(3, rowNum, manager.dictionary(finance.getSignUpComeFrom(), "signUpComeFrom").getItemValue())); sheet.addCell(new Label(4, rowNum, finance.getDepartmentName())); sheet.addCell(new Label(5, rowNum, finance.getMajorName())); sheet.addCell(new Label(6, rowNum, finance.getCourseName())); sheet.addCell(new Label(7, rowNum, String.valueOf(finance.getCourseTuition()))); sheet.addCell(new Label(8, rowNum, manager.dictionary(finance.getCourseDiscount(), "courseDiscount").getItemValue())); sheet.addCell(new Label(9, rowNum, String.valueOf(finance.getActualTuition()))); sheet.addCell(new Label(10, rowNum, finance.getFinanceUser())); sheet.addCell(new Label(11, rowNum, finance.getFinanceTime().toString())); } catch (RowsExceededException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (WriteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
然后在controller调用传值,然后字节流读取 在写到输出流里就好了。
自己写的java excel导出工具类相关推荐
- java Excel导出工具类
Excel工具类 一.开发原因 最近工作的时候,正在写关于Excel导出功能,由于当前使用的工具类不太灵活和不易看懂,自己从头写又很浪费时间等原因,我决定自己写一款很简单的Excel导出的工具类,仅仅 ...
- Excel导出工具类
前言 相信不少同学在开发中都会遇到导出excel这种需求,今天将Excel的导出工具和大家进行一个分享,如有错误还请大佬们批评指正.该工具类可以实现自定义列宽,自定义表头样式,实现了多sheet页合并 ...
- Java之Excel导出工具类使用教程
前言: 本工具类经过PostMan和web页面严格测试可用,经过了多个版本迭代优化,可以直接使用,也方便大家根据自己的业务需求,修改定制自己的导出工具. 市面上有很多封装好的导出工具(如:阿里的eas ...
- Poi excel 导出 工具类参考
public void poiCreateExcel(HttpServletResponse response, Map<String, Object> map) {// 下载文件信息St ...
- esayExcel导出工具类
依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artif ...
- javaExcel 导出(基于POI的复杂表格导出工具类)
我的需求: 项目中有一些工程表格需要导出,设计到行列合并,定制样式,原有工具类冗余,内聚性强.所以想写一个可以随意定制excel的工具类,工具类满足需求: 对于常用的工程表格有模板格式,可以任意插拔. ...
- java Excel导入导出工具类 及使用demo
java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...
- Java操作百万数据量Excel导入导出工具类(程序代码教程)
Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...
- Java Excel导出复杂excel表格样式之ExcelUtil工具类
Java Excel导出包括普通导出及复杂表格样式,主要是对于需要进行行列合并的列进行特殊处理,计算清楚起始行,结束行,起始列,结束列. 普通导出可以是所有列,也可以是包含某些列,或者排除某些列: 1 ...
最新文章
- 深度学习学习指南-工具篇
- C#优化字符串操作【月儿原创】
- 微信小程序初步入坑指南
- love2d杂记9--光照效果
- 导入python标准数学函数模块的语句_《Python编程快速上手——让繁琐工作自动化》——2.8 导入模块...
- 2021-03-15 深入理解SLAM技术【1】 基础知识
- 卡尔曼滤波器学习笔记(二)
- 鸿蒙生态系统第一梯队,鸿蒙系统9月11日,将有望正式成为国际第三大手机操作生态系统...
- python 虚拟环境原理_Python 虚拟环境
- 在linux命令行中直接执行php命令
- 转:.NET使用一般处理程序生成验证码!
- cas ajax请求重定向,cas 单点登录 .net client mvc 重定向问题
- php整形数组求里面的质数,PHP实现的分解质因数操作示例
- ckati与ninja构建demo
- Procexp.exe —— 强大的进程管理器
- 天池性能挑战赛-高性能分析型查询引擎复赛12名赛后方案分享
- 一文搞懂 RabbitMQ 延时队列(订单定时取消为例)
- 【摘录】哈利 · 波特 与密室(1998)
- 关于 QMessageBox定制大小重写showEvent失败的 解决方法
- 计算投资指数基金的预期收益率