java通过模板导出到Excel

本文介绍了如何在Java项目中利用Gradle管理Maven依赖,然后通过EasyExcel库实现从控制层到业务层的导出Excel功能,包括数据查询、模板处理和文件输出的详细步骤。

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

依赖


依赖,该项目是gradle管理依赖,需要maven的可以去maven仓库找一下对应的依赖

implementation 'com.alibaba:easyexcel:2.2.10'

控制层

    @Operation(summary = "导出excel")
    @GetMapping("/export")
    public void exportExcel(@RequestParam String startTime, @RequestParam String endTime, HttpServletResponse response) {
        userDownloadStatisticsService.exportExcel(startTime, endTime, response);
    }

业务层

public void exportExcel(String startTime, String endTime, HttpServletResponse response) {
        //查询需要导出的数据
        LambdaQueryWrapper<UserDownloadStatistics> wrapper = new LambdaQueryWrapper<>();
        wrapper.between(UserDownloadStatistics::getDownloadTime, startTime, endTime);
        wrapper.orderBy(true, true, UserDownloadStatistics::getDownloadTime);
        List<UserDownloadStatistics> statisticsList = list(wrapper);

        //封装成导出模板
        List<UserStatisticsExcel> excelList = new ArrayList<>();
        statisticsList.forEach(date -> excelList.add(new UserStatisticsExcel(date.getDayDownloadNum(), date.getDownloadTime().toString())));
        String fileName = startTime + "~" + endTime + ".新增注册用户数.xlsx";

        //设置要下载的文件的名称
        ClassPathResource classPathResource = new ClassPathResource("/template/新增注册用户数.xlsx");
        InputStream inputStream = classPathResource.getStream();
        try {
            ServletOutputStream out = response.getOutputStream();
            //设置文件类型
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            //设置编码格式
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx");
            //创建excel
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(inputStream).build();
            // 创建sheet
            WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            excelWriter.fill(excelList, fillConfig, writeSheet);
            //填充完成
            excelWriter.finish();
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

模板位置


在这里插入图片描述

模板样式


在这里插入图片描述
这个只是简单的模板导出,上手即用

根据excel模板动态导出数据库数据 package text; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet.ServletContext; import net.sf.jxls.transformer.XLSTransformer; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class TextAction extends ActionSupport { /** */ private static final long serialVersionUID = 1L; private String filename; @SuppressWarnings("rawtypes") public String export() throws Exception { String templateFile = "18.xls"; // String sql = "select * from t_ry order by rybm"; // exportAndDownload(templateFile, DataBase.retrieve(sql)); List datas = new ArrayList(); @SuppressWarnings("unchecked") HashMap map = new HashMap(); map.put("name", "1111"); datas.add(map); exportAndDownload(templateFile, datas); return SUCCESS; } @SuppressWarnings({ "rawtypes", "unchecked" }) public void exportAndDownload(String templateFile, List datas) { try { filename = UUID.randomUUID() + templateFile; // FacesContext context = FacesContext.getCurrentInstance(); // ServletContext servletContext = (ServletContext) // context.getExternalContext().getContext(); ServletContext servletContext = ServletActionContext .getServletContext(); String path = servletContext.getRealPath("\\ExcelFile"); String srcFilePath = path + "\\template\\" + templateFile; String destFilePath = path + "\\download\\" + filename; Map beanParams = new HashMap(); beanParams.put("results", datas); XLSTransformer transfer = new XLSTransformer(); transfer.transformXLS(srcFilePath, beanParams, destFilePath); // Browser.execClientScript("window.location.href='../ExcelFile/downloadfile.jsp?filename=" // + destFile + "';"); } catch (Exception e) { e.printStackTrace(); } } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } }
Java通过模板导出Excel可以使用Apache POI和Jxls两种方式。 1. Apache POI Apache POI是一个用于读写Microsoft Office格式文件的Java库。通过POI,可以使用Java代码读取、创建和修改Excel文件、Word文档和PowerPoint演示文稿等Microsoft Office格式文件。 使用POI导出Excel需要先创建Excel模板,然后在Java代码中读取模板文件,根据数据填充模板,最后将填充后的数据写入新的Excel文件。 2. Jxls Jxls是一个用于将Java数据导出Excel、Word和PDF等格式文件的开源Java库。Jxls提供了一种基于Excel模板的数据填充方式,可以通过Java对象、Map或List等数据源填充Excel模板,并将填充后的数据写入新的Excel文件。 使用Jxls导出Excel需要先创建Excel模板,然后在Java代码中读取模板文件,根据数据填充模板,最后将填充后的数据写入新的Excel文件。 下面是使用Apache POI和Jxls两种方式导出Excel的示例代码: 1. 使用Apache POI导出Excel ```java // 导出Excel模板 public void exportExcelTemplate(String templateFilePath, String destFilePath) throws Exception { InputStream is = new FileInputStream(templateFilePath); Workbook workbook = WorkbookFactory.create(is); Sheet sheet = workbook.getSheetAt(0); // 在模板中填充数据 // ... OutputStream os = new FileOutputStream(destFilePath); workbook.write(os); os.close(); is.close(); } // 导出Excel数据 public void exportExcelData(String templateFilePath, String destFilePath, List<Map<String, Object>> dataList) throws Exception { InputStream is = new FileInputStream(templateFilePath); Workbook workbook = WorkbookFactory.create(is); Sheet sheet = workbook.getSheetAt(0); // 在模板中填充数据 for (int i = 0; i < dataList.size(); i++) { Row row = sheet.createRow(i + 1); Map<String, Object> data = dataList.get(i); row.createCell(0).setCellValue(data.get("name").toString()); row.createCell(1).setCellValue(data.get("age").toString()); // ... } OutputStream os = new FileOutputStream(destFilePath); workbook.write(os); os.close(); is.close(); } ``` 2. 使用Jxls导出Excel ```java // 导出Excel模板 public void exportExcelTemplate(String templateFilePath, String destFilePath) throws Exception { InputStream is = new FileInputStream(templateFilePath); OutputStream os = new FileOutputStream(destFilePath); Context context = new Context(); JxlsHelper.getInstance().processTemplate(is, os, context); os.close(); is.close(); } // 导出Excel数据 public void exportExcelData(String templateFilePath, String destFilePath, List<Map<String, Object>> dataList) throws Exception { InputStream is = new FileInputStream(templateFilePath); OutputStream os = new FileOutputStream(destFilePath); Context context = new Context(); context.putVar("dataList", dataList); JxlsHelper.getInstance().processTemplate(is, os, context); os.close(); is.close(); } ``` 以上是两种方式导出Excel的示例代码,其中使用Jxls导出Excel需要在项目中添加jxls和jxls-poi依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值