JAVA导出EXCEL表格

工作时遇到了一个excel 导出的问题 , 原本是想直接用前端的table直接做excel 导出,但是又发现有点不满足需求

JAVA导出EXCEL表格

是 同是将三个小表格放入到一个excel表格中去,于是就上网找资料

这篇贴子就写的比较清楚详细 于是快乐的抄袭就开始了,但是发现一些不足之处,于是就稍微改动了一下,觉得还是满足使用的

#贴上代码


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


import java.io.*;
import java.util.*;

public class ExcelUtil {

    static HSSFCellStyle style;

    /**
     * 导出Excel
     *
     * @param sheetName sheet名称
     * @param title     标题
     * @param values    内容
     * @param wb        HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, List<Map<String, Object>> values, HSSFWorkbook wb) {
        // 第一步,创建一个HSSFWorkbook
        if (wb == null) {
            wb = new HSSFWorkbook();
            style = getStyle(wb);
            /*创建一个sheet*/
            HSSFSheet sheet = wb.createSheet(sheetName);
            /*设置标题*/
            setTitle(sheet, title);
            /*将map里的数据设置到sheet 中去*/
            setData(sheet, values);
        } else {
            style = getStyle(wb);
            HSSFSheet sheet = wb.getSheet(sheetName);
            setTitle(sheet, title);
            setData(sheet, values);
        }
        return wb;
    }

    private static void setTitle(HSSFSheet sheet, String[] title) {
        int lastRowNum = sheet.getLastRowNum();
        /*获取 最后一行的行号*/
        HSSFRow row = sheet.createRow(lastRowNum + 1);
        for (int i = 0; i < title.length; i++) {
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style);
        }

    }

    /**
     * 构建样式
     *
     * @param wb
     * @return
     */
    private static HSSFCellStyle getStyle(HSSFWorkbook wb) {
        HSSFCellStyle style = wb.createCellStyle();
        // 创建一个居中格式
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        return style;
    }

    /**
     * 填充数据的方法
     *
     * @param sheet
     * @param mapList
     */
    private static void setData(HSSFSheet sheet, List<Map<String, Object>> mapList) {
        int i = sheet.getLastRowNum();
        for (Map<String, Object> value : mapList) {
            HSSFRow row = sheet.createRow(i + 1);
            int j = 0;
            for (Map.Entry<String, Object> entry : value.entrySet()) {
                //将内容按顺序赋给对应的列对象
                row.createCell(j).setCellValue((String) entry.getValue());
                j++;
            }
            i++;
        }
    }

    public static void main(String[] args) {
        String sheetName = "学生信息表";//Sheet名称
        /*说明: 如果是用map的话 必须使用linkHashMap 这样的数据才是有序的,否则就是无序的*/
        Map<String, Object> map = new LinkedHashMap<>();
        List<Map<String, Object>> mapList = new ArrayList<>();
        map.put("name", "小明");
        map.put("sex", "男");
        map.put("age", "10");
        map.put("class", "广东小学");
        map.put("school", "三年二班");
        mapList.add(map);
        String[] title = {"名称", "性别", "年龄", "学校", "班级"};
        //excel文件名
        String fileName = "D://学生信息表" + System.currentTimeMillis() + ".xls";
        //第一次加载数据
        HSSFWorkbook workbook = getHSSFWorkbook(sheetName, title, mapList, null);
        //同一个sheet 中添加其他信息
        Map<String, Object> map1 = new LinkedHashMap<>();
        List<Map<String, Object>> mapList1 = new ArrayList<>();
        map1.put("hight", "165cm");
        map1.put("weight", "80kg");
        map1.put("like", "打篮球");
        mapList1.add(map1);
        String[] titles = {"身高", "体重", "爱好"};
        workbook = getHSSFWorkbook(sheetName, titles, mapList1, workbook);
        OutputStream os = null;
        try {
            os = new FileOutputStream(new File(fileName));
            workbook.write(os);
            os.flush();
            os.close();
            System.out.println("successful");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

#测试结果是

JAVA导出EXCEL表格

刚刚好满足我的要求

未完待续...