Java多sheet导出表格实现(通用)

使用场景

1、主从表数据同时导出,因为数据量较大,使用多sheet展示,可以增加数据可读性。
2、因为项目中多个地方有这个需求,所以花了一些时间编写了一个工具类,提高开发效率。

下面上干货:

实现思路

1、流开启后 ,创建一个Workbook 使用workbook创建多个sheet ,并设置不同的sheetName、表头 ,数据写入文本行后,关闭流。
2、通过反射、泛型 ,达到通用的目的

实现代码(包含单个sheet导出)

public class DataExportToExcelUtil {
   
   

    private DataExportToExcelUtil() {
   
   
    }


    /**
     * 工作薄
     */
    private static HSSFWorkbook workbook;

    //sheet
    private static HSSFSheet sheet;

    //标题行开始位置
    private static final int TITLE_START_POSITION = 0;

    //时间行开始位置
//    private static final int DATEHEAD_START_POSITION = 1;

    //表头行开始位置
    private static final int HEAD_START_POSITION = 1;

    //文本行开始位置
    private static final int CONTENT_START_POSITION = 2;


 /**
     * 数据导出(多sheet)
     *
     * @param dataMap   对象集合   key为主表bean   value为从表List集合
     * @param titleMap  表头信息(对象属性名称--要显示的标题值)
     * @param sheetName sheet名称和表头值(静态部分)
     * @param sheetList sheet名称和表头值 (动态部分)(传入要获取的key对象的字段)
     */
    public static void excelExportBacth(Map<?, ?> dataMap, Map<String, String> titleMap, List<String> sheetList, String sheetName,
                                      String suffix, HttpServletResponse response, String fileName) {
   
   
        try (OutputStream output = response.getOutputStream()) {
   
   
            // 初始化workbook
            initHSSFWorkbook(sheetName);
            Set<?> dateSet = dataMap.keySet();
            for (Object obj : dateSet
            ) {
   
   
                //将sheetName赋给temp
                String temp = sheetName;
                //拼接sheetName
                sheetName = getSheetName(obj, sheetList, sheetName);
                //创建sheet;
                sheet = workbook.createSheet(sheetName);
                //标题行
                createTitleRow(titleMap, sheetName);
                //清空sheetName
                sheetName = temp;
                //时间行
//        createDateHeadRow(titleMap);
                //表头行
                createHeadRow(titleMap);
                // 文本行
                createContentRow
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值