java使用poi导出excel

POI简介:

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

包名称说明

HSSF提供读写Microsoft Excel XLS格式档案的功能。
XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF提供读写Microsoft Word DOC格式档案的功能。
HSLF提供读写Microsoft PowerPoint格式档案的功能。
HDGF提供读Microsoft Visio格式档案的功能。
HPBF提供读Microsoft Publisher格式档案的功能。
HSMF提供读Microsoft Outlook格式档案的功能。

java导出Excel的基本操作

使用的idea是2019 jdk1.8 maven3.1.6
1.创建一个新的工程 导入POI依赖

<!--       poi-->
       <dependency>
           <groupId>org.apache.poi</groupId>
           <artifactId>poi</artifactId>
           <version>3.15</version>
       </dependency>
       <dependency>
           <groupId>org.apache.poi</groupId>
           <artifactId>poi-ooxml-schemas</artifactId>
           <version>3.15</version>
       </dependency>

创建一个普通的类测试

/**
 * 生成excel
 * 使用的是HSSFWorkbook,仅能生成xls格式的excel
 * 在创建存储excel文件流的时候注意不能用.xlsx的扩展名
 */
public class CreateExcel {
    //excel表头名称
    private static String[] COLUMN_NAMES = {"学号", "姓名", "性别", "年龄"};
    //填充数据的key
    private static String[] COLUMNS = {"id", "name", "sex", "age"};
    public static void main(String[] args) {
        JSONArray ary = new JSONArray();
        JSONObject obj = new JSONObject();
        JSONObject obj2 = new JSONObject();
        JSONObject obj3 = new JSONObject();
        obj.put("id", "201811111");
        obj.put("name", "张三");
        obj.put("sex", "男");
        obj.put("age", "18");
        obj2.put("id", "201822222");
        obj2.put("name", "李华");
        obj2.put("sex", "男");
        obj2.put("age", "20");
        obj3.put("id", "201833333");
        obj3.put("name", "刘丽");
        obj3.put("sex", "女");
        obj3.put("age", "18");
        ary.add(obj);
        ary.add(obj2);
        ary.add(obj3);
        createExcel(ary, "第一页", "D:/testCreateExcel.xls");
    }
    /**
     * 生成excel表格
     * @param jsonArray	填充excel的对象,可以灵活的修改成List<T>
     * @param sheetName	sheet页的名字
     * @param savePath	excel保存的路径 D:/text.xls
     */
    public static void createExcel(JSONArray jsonArray, String sheetName, String savePath){
        FileOutputStream out = null;
        try {
            //创建工作簿
            HSSFWorkbook workbook = new HSSFWorkbook();
            //创建sheet
            HSSFSheet sheet = createSheet(workbook, sheetName);
            //创建单元格样式
            HSSFCellStyle style = createCellStyle(workbook);
            //创建头部
            createHead(sheet, style);
            //创建主体内容
            createMainContent(sheet, style, jsonArray);
            out = new FileOutputStream(savePath);
            workbook.write(out);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("======e========" + e.getMessage());
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 创建sheet
     * @param workbook	工作簿
     * @param sheetName	sheet名字
     * @return
     */
    public static HSSFSheet createSheet(HSSFWorkbook workbook, String sheetName){
        HSSFSheet sheet = null;
        //2创建sheet表格
        sheet = workbook.createSheet(sheetName);
        //设置所有的单元格格式
        sheet.setDefaultColumnWidth(20);
        //单独设置时必须是256的倍数
        //sheet.setColumnWidth(0,5120);  
        //sheet.setColumnWidth(1,5120);  
        //sheet.setColumnWidth(2,25600);
        return sheet;
    }
    /**
     * 创建单元格样式
     * @param workbook	工作簿
     * @return
     */
    public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook){
        HSSFCellStyle style = null;
        //1创建文字样式
        HSSFFont font = workbook.createFont();
        //设置文字字体
        font.setFontName("楷体");
        //设置文字大小
        font.setFontHeightInPoints((short) 10);
        //2.创建单元格样式
        style = workbook.createCellStyle();
        // 左右居中
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 上下居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        //设置边框大小
//        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
//        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setBorderTop(BorderStyle.THIN);
        style.setBorderBottom(BorderStyle.THIN);
        style.setBorderLeft(BorderStyle.THIN);
        style.setBorderRight(BorderStyle.THIN);
        //3.将文字样式应用到单元格中
        style.setFont(font);
        return style;
    }
    /**
     * 设置excel头部
     * @param sheet
     * @param style
     */
    public static void createHead(HSSFSheet sheet, HSSFCellStyle style){
        HSSFRow row = sheet.createRow(0);
        for(int i = 0; i < COLUMN_NAMES.length; i ++){
            Cell cell = row.createCell(i);
            cell.setCellValue(COLUMN_NAMES[i]);
            cell.setCellStyle(style);
        }
    }
    /**
     * 创建主题内容
     * @param sheet		sheet表格
     * @param style		单元格样式
     * @param jsonArray	json数据对象
     */
    public static void createMainContent(HSSFSheet sheet, HSSFCellStyle style, JSONArray jsonArray){
        /*
         * 遍历数据创建相应的行以及单元格
         * 第一行已经创建,从第二行开始创建,下标为1
         */
        for(int i = 1; i <= jsonArray.size(); i ++){
            //创建行
            HSSFRow row = sheet.createRow(i);
            JSONObject jsonObject = jsonArray.getJSONObject(i - 1);
            for(int j = 0; j < COLUMNS.length; j ++){
                Cell cell = row.createCell(j);
                cell.setCellValue(jsonObject.getString(COLUMNS[j]));
                cell.setCellStyle(style);
            }
        }
    }
}

设置单元格 字体 样式在此处

    /**
     * 创建单元格样式
     * @param workbook	工作簿
     * @return
     */
    public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook){
        HSSFCellStyle style = null;
        //1创建文字样式
        HSSFFont font = workbook.createFont();
        //设置文字字体
        font.setFontName("楷体");
        //设置文字大小
        font.setFontHeightInPoints((short) 10);
        //2.创建单元格样式
        style = workbook.createCellStyle();
        // 左右居中
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 上下居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        //设置边框大小
//        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
//        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setBorderTop(BorderStyle.THIN);
        style.setBorderBottom(BorderStyle.THIN);
        style.setBorderLeft(BorderStyle.THIN);
        style.setBorderRight(BorderStyle.THIN);
        //3.将文字样式应用到单元格中
        style.setFont(font);
        return style;
    }

运行查看生成表格
java使用poi导出excel
java使用poi导出excel

上一篇:python-excel处理


下一篇:.net Excel导出