自己写的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 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
		Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ... 
- 基于jdk1.7实现的excel导出工具类
		通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ... 
- EXCEL导出工具类及调用
		一.Excel导出工具类代码 package com.qiyuan.util; import java.io.OutputStream; import java.io.UnsupportedEncod ... 
- excel导出工具类
		package com.jianwu.util.excel; import com.google.common.collect.Lists;import com.jianwu.exception.Mo ... 
- 一个很好的通用 excel 导出工具类
		此类用主要 jxl +注解+流 实现扩展性很强,jxl性能会比poi好一点,值得我们学习. package oa.common.utils; import java.io.OutputStream; ... 
- Java基础学习总结(49)——Excel导入导出工具类
		在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ... 
- 使用Apache poi来编写导出excel的工具类
		在JavaWeb开发的需求中,我们会经常看到导出excel的功能需求,然后java并没有提供操作office文档的功能,这个时候我们就需要使用额外的组件来帮助我们完成这项功能了. 很高兴Apache基 ... 
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
		前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ... 
- 通用Excel文件导出工具类
		1:Excel格式 2:ExcelUtil.java import java.io.ByteArrayOutputStream; import java.io.IOException; import ... 
随机推荐
- soui中,列表控件动态高度的使用注意
			1.listview的模板template中,需要增加defHeight属性,即默认高度,同时,不能出现itemHeight属性,否则动态高度会失效 2.数据适配器中,重写getViewDesired ... 
- PHPExcel 使用笔记
			获取sheet 有效效值行列数 $maxCell = $objWorksheet->getHighestRowAndColumn(); $data = $objWorksheet->ran ... 
- ASP.Net的两种开发模式
			一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ... 
- SEO实战宝典阅读笔记
			1. 对搜索引擎更友好 1.1 sitemap sitemap自动生成 https://www.xml-sitemaps.com 谷歌 sitemap.xml 百度 sitemap.html 1.2 ... 
- Java中Properties类知识的总结
			一.Properties类与配置文件 注意:是一个Map集合,该集合中的键值对都是字符串.该集合通常用于对键值对形式的配置文件进行操作. 配置文件:将软件中可变的部分数据可以定义到一个文件中,方便以后 ... 
- C和C++混合编程中的extern "C" {}
			引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: 1 2 3 4 5 6 7 8 9 #ifdef __cplusplus extern "C" { #endif ... 
- Java线程:线程的同步-同步方法
			Java线程:线程的同步-同步方法 线程的同步是保证多线程安全访问竞争资源的一种手段. 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问 ... 
- 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)
			原文链接:http://www.cnblogs.com/outlooking/p/5243415.html 设置步骤如下: 1.点 “window”-> "Preferences&qu ... 
- 数据迁移工具sqoop
			有问题........数据迁移工具sqoop sqoop安装 [root@sqoop data]# wget wget http://apache.fayea.com/sqoop/1.4.6/sqo ... 
- tomcat,zookeeper,activeMQ,Kafka设置jvm参数
			1,tomcat设置jvm参数 设置方法: 在tomcat bin 目录增加配置:setenv.sh #add tomcat pid CATALINA_PID="$CATALINA_ ... 
