Spring boot实现Excel导出文件

Spring boot实现Excel导出文件,第1张

Spring boot实现Excel导出文件
1、增加依赖

ps:版本太高有概率发生slf4j的依赖冲突,版本改为4.1.2后冲突自动消失。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
2、Controller书写

有这种导出需求的必然都是在浏览器 *** 作,所以直接controller请求:

/**
 * 导出Excel
 */
@GetMapping("exportToExcel")
public void exportToExcel(HttpServletResponse response) throws IOException {
	Workbook wb = homePageManager.exportToExcel();
    OutputStream output = response.getOutputStream();
    String fileName = "接入详情.xlsx";
    try {
        fileName = URLEncoder.encode(fileName, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    response.setHeader("Content-disposition", "attachment;filename=" + fileName + ";" + "filename*=utf-8''" + fileName);
    wb.write(output);
    output.close();
}

3、Service书写

Service

Workbook exportToExcel2();

ServiceImpl

@Override
public Workbook exportToExcel() {
	//这是表头
	String[] arr = {"名称","年龄"};
	//这是具体数据
	List list1 = new ArrayList<>();
	list1.add("张三");
	list1.add("18");
	List list2 = new ArrayList<>();
	list2.add("李四");
	list2.add("33");
	List<List> list = new ArrayList<>();
	list.add(list1);
	list.add(list2);
    return ExcelWrite.writeToExcelByList(arr, list);
}

4、具体的Excel方法
public static Workbook writeToExcelByList(String[] array, List<List> list) {
        //创建工作薄
        Workbook wb = new XSSFWorkbook();
        //标题和页码
        CellStyle titleStyle = wb.createCellStyle();
        // 设置单元格对齐方式,水平居左
        titleStyle.setAlignment(HorizontalAlignment.LEFT);
        // 设置字体样式
        Font titleFont = wb.createFont();
        // 字体高度
        titleFont.setFontHeightInPoints((short) 12);
        // 字体样式
        titleFont.setFontName("黑体");
        titleStyle.setFont(titleFont);
        //创建sheet
        Sheet sheet = wb.createSheet("接入详情");
        // 自动设置宽度
        sheet.autoSizeColumn(0);
        // 在sheet中添加标题行// 行数从0开始
        Row row = sheet.createRow((int) 0);
        for (int i = 0; i < array.length; i++) {
            Cell cell = row.createCell(i);
            cell.setCellValue(array[i]);
            cell.setCellStyle(titleStyle);
        }
        // 数据样式 因为标题和数据样式不同 需要分开设置 不然会覆盖
        CellStyle dataStyle = wb.createCellStyle();
        // 设置居中样式,水平居中
        dataStyle.setAlignment(HorizontalAlignment.CENTER);
        //数据从序号1开始
        try {
            int index = 1;
            for (List value : list) {
                // 默认的行数从0开始,为了统一格式设置从1开始,就是从excel的第二行开始
                row = sheet.createRow(index);
                index++;
                List data = value;
                for (int j = 0; j < data.size(); j++) {
                    Cell cell = row.createCell(j);
                    // 为当前列赋值
                    cell.setCellValue(data.get(j).toString());
                    //设置数据的样式
                    cell.setCellStyle(dataStyle);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return wb;
    }
5、效果图

我试了好多遍都可行,代码直接照抄就行,处理少部分需要修改,肯定能够成功。

在postman测试的话,只需要如下 *** 作:

–我是“道祖且长”,一个在互联网"苟且偷生"的Java程序员
“有任何问题,可评论,我看到就会回复”

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/874834.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存