导出excel【动态表头,多个sheet】

该代码段展示了在SpringBoot应用中,一个@Service实现类用于导出Excel的详细过程。方法包括单个sheet和多个sheet的导出,涉及数据获取、合并单元格、设置列名、样式定制以及文件下载。主要依赖了Hutool库进行Excel操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Service实现类

@Service
public class ExportService {
   
    @Autowired
    private BidExportMapper bidExportMapper;
    @Autowired
    private ExcelMapper excelMapper;

    /**
     * 导出excel - 单个sheet
     *
     * @param packageId 
     * @param request  HttpServletRequest
     * @param response HttpServletResponse
     * @throws Exception
     */
    public void exportSupplierQuotationDetailsAboutPackage(String packageId, HttpServletRequest request, HttpServletResponse response) throws Exception {
   
        //获取表头列表
        Map<String, String> headerTitle = getHeaderTitle(packageId);
        //获取数据内容
        List<Map<String,Object>> resultList = getResultList(packageId);
        //通过工具类创建writer
        ExcelWriter writer = ExcelUtil.getWriter(true);
        //重命名当前sheet
        writer.renameSheet("导出excel的sheet名称");
        //合并单元格后的标题行,取消默认标题样式
        writer.merge(headerTitle.size()-1, "表格的标题",false);
        //设置列名
        writer.setHeaderAlias(headerTitle);
        //如果想只写出加了别名的字段,可以调用此方法排除之
        writer.setOnlyAlias(true);
        //如果没有内容,则写出标题【表头列】
        if (CollectionUtil.isEmpty(resultList)){
   
            writer.writeHeadRow(headerTitle.values());
        }
        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(resultList,true);
        //设置样式
        setStyle(writer, headerTitle.size());
        //导出下载
        exportDownload(response,writer,"导出excel标题");
    }
    /**
     * 导出excel - 多个sheet
     *              
     *              
     * @param tenderProjectId 
     * @param request HttpServletRequest
     * @param response HttpServletResponse
     * @throws Exception
     */
    public void exportSupplierQuotationDetailsTotal(String tenderProjectId, HttpServletRequest request, HttpServletResponse response) throws Exception {
   
        //根据采购方案ID,获取包件列表
        List<PurTenderProjectPackagesVo> packageList = bidExportMapper.packageListByTenderProjectId(tenderProjectId);
        //通过工具类创建writer
        ExcelWriter writer = ExcelUtil.getWriter(true);
        packageList.stream().forEach(item->{
   
            //获取表头列表
            Map<String, String> headerTitle = getHeaderTitle(item.getId());
            //获取数据内容
            List<Map<String,Object>> resultList = getResultList(item.getId());
            if (CollectionUtil.isNotEmpty(resultList)){
   
                //自定义需要读取或写出的Sheet,如果给定的sheet不存在,创建之。
                writer.setSheet(item.getCode());
                //合并单元格后的标题行,使用默认标题样式
                writer.merge(headerTitle.size()-1, "表格的标题",false);
                //设置列名
                writer.setHeaderAlias(headerTitle);
                //如果想只写出加了别名的字段,可以调用此方法排除之
                writer.setOnlyAlias(true);
                // 一次性写出内容,使用默认样式,强制输出标题
                writer.write(resultList,true);
                //设置样式
                setStyle(writer, headerTitle.size());
            }
        });
        //删除sheet1,因为sheet1为空
        writer.getWorkbook().removeSheetAt(0);
        //导出下载
        exportDownload(response,writer,"导出excel标题");
    }
    /**
     * 获取标题列表
     *			这里的标题列表,指的是表头列表,我的业务需求是在表中获取标题列表信息
     *	        注意:根据自己业务需求进行标题变更
     * @param packageId 包件ID
     * @return 标题
     */
    public Map<String,String> getHeaderTitle(String packageId){
   
        //根据包件ID,获取报价模板
        List<PurTenderProjectPriceTemplateItemVo> templateList =  bidExportMapper.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值