SpringBoot 设置Excel 多sheet导出

先交代下业务背景,做的是问卷调研的答卷导出,每一个人答卷设置一个sheet,
一般的Excel导出是按单个sheet的最大行数(默认65536 )为基数,超过这个基数后再分一个sheet。
对数据的处理以 List>格式操作的 简单来说就是多取一层list也就多一层循环,主要方法有以下两个。
	//填充excel
	public void fillExcelDataExam(int index, Row row,int getList)
    {
    	//lists --> List>
        List<T> ts = lists.get(getList);
        int startNo = index * sheetSize;
        int endNo = Math.min(startNo + sheetSize, ts.size());
        for (int i = startNo; i < endNo; i++)
        {
            row = sheet.createRow(i + 1 - startNo);
            // 得到导出对象.
            T vo = (T) ts.get(i);
            int column = 0;
            for (Object[] os : fields)
            {
                Field field = (Field) os[0];
                Excel excel = (Excel) os[1];
                // 设置实体类私有属性可访问
                field.setAccessible(true);
                this.addCell(excel, row, vo, field, column++);
            }
        }
    }
	/**
     * 对list数据源将其里面的数据导入到excel表单
     * 
     * @return 结果
     */
	public AjaxResult exportExcelExam()
    {
        OutputStream out = null;
        try
        {
            for(int y = 0; y < lists.size(); y ++){
                List<T> ts = lists.get(y);
                // 取出一共有多少个sheet.
                double sheetNo = Math.ceil(ts.size() / sheetSize);
                for (int index = 0; index <= sheetNo; index++)
                {
                    createSheet(lists.size(), y);

                    // 产生一行
                    Row row = sheet.createRow(0);
                    int column = 0;
                    // 写入各个字段的列头名称
                    for (Object[] os : fields)
                    {
                        Excel excel = (Excel) os[1];
                        this.createCell(excel, row, column++);
                    }
                    if (Type.EXPORT.equals(type))
                    {
                        fillExcelDataExam(index, row, y);
                    }
                }
            }

            String filename = encodingFilename(sheetName);
            out = new FileOutputStream(getAbsoluteFile(filename));
            wb.write(out);
            return AjaxResult.success(filename);
        }
        catch (Exception e)
        {
            log.error("导出Excel异常{}", e.getMessage());
            throw new BusinessException("导出Excel失败,请联系网站管理员!");
        }
        finally
        {
            if (wb != null)
            {
                try
                {
                    wb.close();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
            if (out != null)
            {
                try
                {
                    out.close();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
        }
    }

结果
SpringBoot 设置Excel 多sheet导出_第1张图片

你可能感兴趣的:(excel导出)