简单EXCEL列表导出

5656.png

本例子,简单介绍excel导出功能,基于HttpServletResponse,网络文件下载。
依赖jar

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

工具类:


import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.UUID;

/**
 * Created on 2021/8/6.
 *
 * @author bruce
 */
@Slf4j
public abstract class AbstractExcelExportInterface {
    void write(HttpServletResponse response, Workbook workbook) {
        String fileName = UUID.randomUUID().toString() + ".xls";
        pwrite(response, workbook, fileName);
    }

    void write(HttpServletResponse response, Workbook workbook, String fileName) {
        if (StringUtils.isEmpty(fileName)) {
            fileName = UUID.randomUUID().toString() + ".xls";
        }
        pwrite(response, workbook, fileName);
    }

    protected void write(HttpServletResponse response, List<List<String>> lists, String fileName) {
        if (StringUtils.isEmpty(fileName)) {
            fileName = UUID.randomUUID().toString() + ".xls";
        }
        SXSSFWorkbook workbook = new SXSSFWorkbook(lists.size());
        SXSSFSheet sheet = workbook.createSheet(fileName.substring(0, fileName.indexOf(".xls")));
        Integer rowIndex = 0;
        SXSSFRow row = null;
        SXSSFCell cell = null;
        for (List<String> rowData : lists) {
            Integer columnIndex = 0;
            row = sheet.createRow(rowIndex++);
            for (String columnVal : rowData) {
                cell = row.createCell(columnIndex++);
                cell.setCellValue(columnVal);
            }
        }
        pwrite(response, workbook, fileName);
    }

    private void pwrite(HttpServletResponse response, Workbook workbook, String fileName) {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        try {
            response.addHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("UTF-8"), "ISO8859-1"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            fileName = UUID.randomUUID().toString() + ".xls";
            response.addHeader("Content-Disposition", "attachment; filename=" + fileName);
        }
        try {
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            log.warn("下载excel异常", e);
        }
    }
}

用法

子类继承上述工具类接口,调用父类方法实现数据写出
write(response, lists, "测试.xls");
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,188评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,691评论 25 709
  • 秋天已经到了,冬天还会远吗?2017年8月以来,金融和经济两个维度的数据都说明-----经济收缩力量已经显著超出扩...
    喵小喵的成长阅读 2,944评论 0 0
  • 本文为转载,原文:Vue学习笔记进阶篇——Render函数 基础 Vue 推荐在绝大多数情况下使用 templat...
    ChainZhang阅读 11,579评论 4 12
  • 青春 是成长的最后一次蜕变 是生活的最后一次挣扎 是岁月的最后一次祭奠
    井然_a2e6阅读 1,463评论 0 0

友情链接更多精彩内容