JAVA之POI导出Excel

POI:Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。

现在用的比较多的都是用POI技术来导出或者导入Excel,最近工作需要使用导出Excel文件,所以学习了一下,总结一下POI导出Excel的使用。
在项目pom.xml中添加坐标


org.apache.poi
poi
3.6

Jakarta POI HSSF API 组件

HSSF用于操作Excel的组件对象,常用对象:

  1. 常用组件:
    • HSSFWorkBook -----excel的文档对象
    • HSSFSheet -----excel表单
    • HSSFRow -----excel的行
    • HSSFCell -----excel的格子单元(列)
    • HSSFFont -----excel的字体
    • HSFFDataFormat -----日期格式
    • HSSFHeader ------sheet头
    • HSSFFooter -----sheet尾
  2. 样式:
    • HSSFCellStype -----cell的样式

基本操作步骤

首先一个Excel文件对应一个workbook,一个workbook中有多个sheet组成,一个sheet是由多个行(row)和列(cell)组成,那么使用顺序:

  1. 用HSSFWorkbook创建一个Excel文件对象
  2. 用HSSFWorkbook对象创建一个Sheet对象
  3. 用Sheet对象创建行对象(row),用行对象得到cell对象(列)
  4. 对cell对象进行读或写操作。
  5. 将生成的HSSFWorkbook放入HttpServletResponse中响应到前端页面

代码演示:

public class ExportExcelUtil {

    /**
    *@Author:hyg
    *@Description:导出excel
    *@Date:15:06 2020/8/12
    *@param: sheetName sheet名称
     *@param: title 标题
     *@param: values 内容
     *@param: wb HSSFWorkbook对象
    *@return:
    */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName,String[] title,String[][] values,HSSFWorkbook wb){
        //第一步,创建一个HSSFWorkbook,对应一个Excel文件
        if (wb==null){
            wb=new HSSFWorkbook();
        }
        //第二步 在workbook中添加一个sheet,对应Excel文件中得sheet
        HSSFSheet sheet=wb.createSheet(sheetName);

        //第三步,在sheet中添加表头第0 行

        HSSFRow row=sheet.createRow(0);

        //第四步,创建单元格,设置表头居中
        HSSFCellStyle stype=wb.createCellStyle();
        stype.setAlignment(HSSFCellStyle.ALIGN_CENTER);

        //生命列对象
        HSSFCell cell=null;

        //创建标题
        for (int i=0;i

工具类做好后,在业务层进行数据的处理。

service层
List list=workPostApplyShMapper.selectWorkPostApplyList(query,dw,type,xnxq);
        String[] title=new String[]{"岗位名称","设岗导师","所需人数","年级","应聘条件及其要求","学期工作量","计酬标准","学期津贴总额","备注"};
        int point=list.size();
        String filename = "工作岗位汇总.xls";
        String sheetName = "sheet";
        String[][] content = new String[point+1][title.length];
        int num = 0;
        for (YggzgwListVO yggzgwListVO:list){
            content[num][0]=yggzgwListVO.getGwmc();
            content[num][1]=yggzgwListVO.getDsxm();
            content[num][2]=String.valueOf(yggzgwListVO.getRs()) ;
            content[num][3]=yggzgwListVO.getNj();
            content[num][4]=yggzgwListVO.getTj();
            content[num][5]=yggzgwListVO.getXqgzl();
            content[num][6]=String.valueOf(yggzgwListVO.getJcbz());
            content[num][7]=yggzgwListVO.getXqjtz().toString();
            content[num][8]=yggzgwListVO.getBz();
            num++;
        }
        //导出
        ExcelUtil.exportExcel(response,sheetName,filename,title,content);

样式的设置

1. 单元格合并
使用HSSFSheet的addMergedRegion()方法

public int addMergedRegion(CellRangeAddress region)

参数CellRangeAddress 表示合并的区域,构造方法:

CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)

参数依次表示:起始行,截至行,起始列,截至列。
2. 单元格样式

  • 设置单元格的行高、列宽

HSSFSheet sheet=wb.createSheet();

sheet.setDefaultRowHeightInPoints(10);//设置缺省列高sheet.setDefaultColumnWidth(20);//设置缺省列宽
//设置指定列的列宽,256 * 50这种写法是因为width参数单位是单个字符的256分之
sheet.setColumnWidth(cell.getColumnIndex(), 256 * 50);

3. 单元格样式
首先创建:HSSFCellStyle

HSSFCellStyle cellStyle=wkb.createCellStyle()

操作:

cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中

设置单元格的填充方式,以及前景颜色和背景颜色
提示:

  • 如果需要前景颜色或背景颜色,一定要指定填充方式,两者顺序无所谓;

  • 如果同时存在前景颜色和背景颜色,前景颜色的设置要写在前面;

  • 前景颜色不是字体颜色。

//填充方式
cellStyle.setFillPattern(HSSFCellStyle.DIAMONDS);
//设置前景色
cellStyle.setFillForegroundColor(HSSFColor.RED.index);
//设置背景颜色
cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);

// 设置单元格底部的边框及其样式和颜色
// 这里仅设置了底边边框,左边框、右边框和顶边框同理可设,关于参数自己可以尝试
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);
cellStyle.setBottomBorderColor(HSSFColor.DARK_RED.index);

//设置日期型数据的显示样式
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));

重要的一步

将样式应用于单元格,注意有些样式只对单元格起作用

cell.setCellStyle(cellStyle);
row.setRowStyle(cellStyle);

设置字体样式

  1. 创建HSSFFont对象,需要先创建HSSFWorkbook对象

HSSFFont fontStyle = wb.createFont();

字体的各种样式

//设置字体样式
fontStyle.setFontName("宋体");
//设置字体高度
fontStyle.setFontHeightInPoints((short)20);
//设置字体颜色
font.setColor(HSSFColor.BLUE.index);
//设置粗体
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//设置斜体
font.setItalic(true);
//设置下划线
font.setUnderline(HSSFFont.U_SINGLE);

一样,设置号样式需要手动将它应用到单元格
因为字体也是单元格格式的一部分,所以从属于HSSFCellStyle,需要将它赋值到HSSFCellStyle的对象里。

// 将字体对象赋值给单元格样式对象
cellStyle.setFont(font);
// 将单元格样式应用于单元格
cell.setCellStyle(cellStyle);

你可能感兴趣的:(JAVA之POI导出Excel)