java使用jxls导出Excel

 jxls是基于POI的Excel模板导出导入框架。通过使用类似于jstl的标签,有效较少导出Excel的代码量。

1.pom

        <!-- https://mvnrepository.com/artifact/net.sf.jxls/jxls-core -->
        <dependency>
            <groupId>net.sf.jxls</groupId>
            <artifactId>jxls-core</artifactId>
            <version>1.0.3</version>
        </dependency>

2.模板样式

一般数据直接绑定跟 jstl比较像,直接${name}

循环就是 <jx:forEach items="${data}" var="item" varStatus="i" ></jx:forEach>

3.代码演示

    @Test
    public void method1() throws Exception {
        // 循环数据
        List<Object> list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            Map<String,Object> data = new HashMap<>();
            data.put("a1", (int)(Math.random()*100) );
            data.put("a2", (int)(Math.random()*100) );
            data.put("a3", (int)(Math.random()*100) );
            data.put("a4", (int)(Math.random()*100) );
            data.put("a5", (int)(Math.random()*100) );
            list.add(data);
        }
        // 表格使用的数据
        Map map = new HashMap();
        map.put("data",list);
        map.put("title","java基于模板导出excel表格");
        map.put("val","演示合并单元格的数据显示");
        // 获取模板文件
        InputStream is = this.getClass().getClassLoader().getResourceAsStream("x1.xls");
        // 实例化 XLSTransformer 对象
        XLSTransformer xlsTransformer = new XLSTransformer();
        // 获取 Workbook ,传入 模板 和 数据
        Workbook workbook =  xlsTransformer.transformXLS(is,map);
        // 写出文件
        OutputStream os = new BufferedOutputStream(new FileOutputStream("D://temp.xls"));
        // 输出
        workbook.write(os);
        // 关闭和刷新管道,不然可能会出现表格数据不齐,打不开之类的问题
        is.close();
        os.flush();
        os.close();
    }

4.导出效果

5.web环境下跑
web环境下跑和上面的代码基本上一样,不一样的就是  OutputStream 的地方换成了  response.getOutputStream()

然后  response 设置一下文件名, response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("报表.xls" ,"UTF-8"));

如果这一步不懂得可以参考我得另一篇文章:https://blog.csdn.net/yali_aini/article/details/81745883

代码:

import net.sf.jxls.transformer.XLSTransformer;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Controller
public class ReportController {
 
    @RequestMapping("/report")
    public void report(HttpServletRequest request , HttpServletResponse response){
        try{
            // 循环数据
            List<Object> list = new ArrayList<>();
            for (int i = 0; i < 100; i++) {
                Map<String,Object> data = new HashMap<>();
                data.put("a1", (int)(Math.random()*100) );
                data.put("a2", (int)(Math.random()*100) );
                data.put("a3", (int)(Math.random()*100) );
                data.put("a4", (int)(Math.random()*100) );
                data.put("a5", (int)(Math.random()*100) );
                list.add(data);
            }
            // 表格使用的数据
            Map map = new HashMap();
            map.put("data",list);
            map.put("title","java基于模板导出excel表格");
            map.put("val","演示合并单元格的数据显示");
            // 获取模板文件
            InputStream is = this.getClass().getClassLoader().getResourceAsStream("x1.xls");
            // 实例化 XLSTransformer 对象
            XLSTransformer xlsTransformer = new XLSTransformer();
            // 获取 Workbook ,传入 模板 和 数据
            Workbook workbook =  xlsTransformer.transformXLS(is,map);
 
            // 设置文件名
            response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("报表.xls" ,"UTF-8"));
            // 写出文件
            OutputStream os = new BufferedOutputStream( response.getOutputStream() );
            // 输出
            workbook.write(os);
            // 关闭和刷新管道,不然可能会出现表格数据不齐,打不开之类的问题
            is.close();
            os.flush();
            os.close();
        }catch (Exception e){
        
        }
    }
}

 

访问 /report/ 连接时就直接下载文件了,打开看和刚才测试跑的是一样的。

 

 

 

————————————————
版权声明:本文为CSDN博主「临窗,听雨声」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yali_aini/article/details/85804466

转载于:https://www.cnblogs.com/ryelqy/p/11496353.html

购物商城项目采用PHP+mysql有以及html+css jq以及layer.js datatables bootstorap等插件等开发,采用了MVC模式,建立一个完善的电商系统,通过不同用户的不同需求,进行相应的调配和处理,提高对购买用户进行配置….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值