spring boot 导出excel

最近做一个项目要实现导出excel功能 项目用的是spring boot 框架 话不多说直接上代码

第1步:pom.xml中添加依赖

         <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

第2部:导出excel工具类

package com.example.demo.until;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;

public class ExportExcelUntil {
    
    /**
     * 
     * @param wb excel稳定
     * @param sheetName
     * @param headtitle
     * @param subLeftTitle
     * @param subRightTitle
     * @param content
     * @param titles
     * @param cellWiths
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(HSSFWorkbook wb,String sheetName,String headTitle,String subLeftTitle,String subRightTitle,String[][] content,String[] titles,int[] cellWiths) {
        //如果 wb 为空则新建
        if(wb==null) {
            wb = new HSSFWorkbook();
        }
        //创建一个工作表 工作表名称为sheetName
        HSSFSheet sheet = wb.createSheet(sheetName);
        
        //在第0行中添加表头
        HSSFRow row = sheet.createRow(0);
        //合并单元格
        CellRangeAddress cra = new CellRangeAddress(0,0,0,titles.length-1);
        sheet.addMergedRegion(cra);
        //设置表头风格 字体
        HSSFFont font =wb.createFont();
        font.setFontName("黑体");
        font.setFontHeightInPoints((short)15);
        HSSFCellStyle headStyle = wb.createCellStyle();
        headStyle.setFont(font);
        //设置表头风格对齐
        headStyle.setAlignment(HorizontalAlignment.CENTER);
        //设置表头风格边框
        headStyle.setBorderBottom(BorderStyle.THIN);
        headStyle.setBorderRight(BorderStyle.THIN);
        headStyle.setBorderTop(BorderStyle.THIN);
        headStyle.setBorderLeft(BorderStyle.THIN);
        for(int i=0;i<titles.length;i++) {
            HSSFCell cell = row.createCell(i);
            if(i==0) {
                cell.setCellValue(headTitle);
            }
            cell.setCellStyle(headStyle);
            sheet.setColumnWidth(i, cellWiths[i]*256);
        }
        
        //在第一行添加左标题和右标题
        row = sheet.createRow(1);
        //左下标题合并单元格
        int subcellNum = titles.length/2-1;
        CellRangeAddress leftTitlecra = new CellRangeAddress(1,1,0,subcellNum);
        sheet.addMergedRegion(leftTitlecra);
        //左标题风格 
        HSSFFont subTiteFont = wb.createFont();
        subTiteFont.setFontName("黑体");
        subTiteFont.setFontHeightInPoints((short)10);
        HSSFCellStyle leftTitleStyle = wb.createCellStyle();
        leftTitleStyle.setFont(subTiteFont);
        leftTitleStyle.setBorderLeft(BorderStyle.THIN);
        leftTitleStyle.setBorderTop(BorderStyle.THIN);
        leftTitleStyle.setBorderBottom(BorderStyle.THIN);
        for(int i=0;i<titles.length/2;i++) {
            HSSFCell cell= row.createCell(i);
            cell.setCellStyle(leftTitleStyle);
            if(i==0) {
                cell.setCellValue(subLeftTitle);
            }
        }
        //右下标题合并单元格
        int startcellNum = titles.length/2;
        int endcellNum = titles.length-1;
        CellRangeAddress rightTtitelcra = new CellRangeAddress(1,1,startcellNum,endcellNum);
        sheet.addMergedRegion(rightTtitelcra);
        //右下标题风格
        HSSFCellStyle rightTitleStytle = wb.createCellStyle();
        rightTitleStytle.setFont(subTiteFont);
        rightTitleStytle.setBorderTop(BorderStyle.THIN);
        rightTitleStytle.setBorderRight(BorderStyle.THIN);
        rightTitleStytle.setBorderBottom(BorderStyle.THIN);
        for(int i = titles.length/2;i<titles.length;i++) {
            HSSFCell cell = row.createCell(i);
            cell.setCellStyle(rightTitleStytle);
            if(i==titles.length/2) {
                cell.setCellValue(subRightTitle);
            }
        }
        
        //生成表头标题
        row = sheet.createRow(2);
        HSSFFont titleFont = wb.createFont();
        titleFont.setFontName("黑体");
        titleFont.setFontHeightInPoints((short)10);
        HSSFCellStyle titleStyle = wb.createCellStyle();
        titleStyle.setFont(titleFont);
        titleStyle.setAlignment(HorizontalAlignment.CENTER);
        titleStyle.setBorderLeft(BorderStyle.THIN);
        titleStyle.setBorderTop(BorderStyle.THIN);
        titleStyle.setBorderRight(BorderStyle.THIN);
        titleStyle.setBorderBottom(BorderStyle.THIN);
        for(int i=0;i<titles.length;i++) {
            HSSFCell cell = row.createCell(i);
            cell.setCellStyle(titleStyle);
            cell.setCellValue(titles[i]);
        }
        
        //生成表格主体
        int len = content.length;
        //设置表格主体风格
        HSSFFont bodyFont = wb.createFont();
        bodyFont.setFontName("黑体");
        bodyFont.setFontHeightInPoints((short)9);
        HSSFCellStyle bodyStyle = wb.createCellStyle();
        bodyStyle.setFont(bodyFont);
        bodyStyle.setAlignment(HorizontalAlignment.CENTER);
        bodyStyle.setBorderLeft(BorderStyle.THIN);
        bodyStyle.setBorderTop(BorderStyle.THIN);
        bodyStyle.setBorderRight(BorderStyle.THIN);
        bodyStyle.setBorderBottom(BorderStyle.THIN);
        for(int i=0;i<len;i++) {
            row = sheet.createRow(i+3);
            for(int j=0;j<titles.length;j++) {
                HSSFCell cell = row.createCell(j);
                cell.setCellStyle(bodyStyle);
                cell.setCellValue(content[i][j]);
            }
        }
        return wb;
    }

}
导出测试

@Test
    public void contextLoads() {
        String[] titles = {"姓名","性别","班级","特长"};
        int[] cellWiths = {30,30,30,30};
        String[][] content = new String[2][titles.length];

        content[0][0] = "麦兜";
        content[0][1] = "男";
        content[0][2] = "0-3班";
        content[0][3] = "唱歌、讲冷笑话";
        content[1][0] = "阿may";
        content[1][1] = "女";
        content[1][2] = "0-3班";
        content[1][3] = "唱歌、讲冷笑话";
        
        HSSFWorkbook wb =ExportExcelUntil.getHSSFWorkbook(null, "test", "春天花花幼稚园同学录", "校长:光头校长", "老师:阿花", content, titles, cellWiths);
        try {
            
            wb.write(new File("D://test/test.xls"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

导出效果

猜你喜欢

转载自blog.csdn.net/qq_39150341/article/details/81975515