1.pom.xml中加入poi依赖:

  <!-- poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.10-FINAL</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.10-FINAL</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.10-FINAL</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

2.创建导出excel文件模板;

3.controller层实现代码:

 @PostMapping("/excelCarrierOrder")
    public ResponseEntity<Resource> excelCarrierOrder(@RequestBody Map<String,Object> params,HttpServletResponse response) throws IOException{

    //列表数据
         XSSFWorkbook workbook = carrierOrderService.excelCarrierOrder(params);
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         workbook.write(os);
         response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
         response.setHeader("Pragma", "no-cache");
         response.setHeader("Expires", "0");
         response.setHeader("charset", "utf-8");
         // 当前日期,用于导出文件名称
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
         String name =sdf.format(new Date()) + ".xlsx";
         response.setHeader("Content-Disposition", "attachment;filename=\"" + URLEncoder.encode(name, "UTF-8") + "\"");
         workbook.write(response.getOutputStream());
         if (null != os) {
             os.close();
         }
         return new ResponseEntity<Resource>(null, null, HttpStatus.OK);
    }

4.service实现类实现代码:

@Override
    public XSSFWorkbook excelCarrierOrder(Map<String, Object> params) throws IOException {

   //模板路径
        String path = "/templates/excel/订单列表.xlsx";
        XSSFWorkbook workboot = new XSSFWorkbook(this.getClass().getResourceAsStream(path));
        //sheet页(默认sheet1页),也可通过workboot.createSheet("订单列表")创建sheet页
        XSSFSheet sheetAt = workboot.getSheetAt(0);
        //订单基本表数据
        List<CarrierOrderPojo> list = mapper.getExcelCarrierOrder(params);

   //开始创建行和表格并且加入数据
        //行
        XSSFRow row;
        int i = 0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        if(null != list && !list.isEmpty()) {
            for (CarrierOrderPojo dto : list) {
                //根据订单id查询车辆信息
                List<CarrierOrderTruck> truckList = truckMapper.getTruckList(dto.getId());
                //根据订单id查询装卸车费用
                List<CarrierOrderServe> serveList = serveMapper.getServeList(dto.getId());
                //根据订单id查询采购详情
                List<CarrierOrderDetail> detailList = detailMapper.getCarrierOrderDetailList(dto.getId());
                String purchaseOrderNumber = "";
                i += 1;
                //创建行
                row = sheetAt.createRow(i);
                //承运商
                if(null != dto.getCarrierName()) {
                    row.createCell(0).setCellValue(dto.getCarrierName());
                }else {
                    row.createCell(0).setCellValue("");
                }
                //物流单号
                if(null != dto.getLogisticsNumber()) {
                    row.createCell(1).setCellValue(dto.getLogisticsNumber());
                }else {
                    row.createCell(1).setCellValue("");
                }
                //采购单号
                if(null != detailList && !detailList.isEmpty()) {
                    for (CarrierOrderDetail detaildto : detailList) {
                        purchaseOrderNumber += detaildto.getPurchaseOrderNumber()+",";
                    }
                    row.createCell(2).setCellValue(purchaseOrderNumber.substring(0, purchaseOrderNumber.length()-1));
                }else {
                    row.createCell(2).setCellValue("");
                }
                //发货时间
                if(null != dto.getTakingDate()) {
                    row.createCell(3).setCellValue(sdf.format(dto.getTakingDate()));
                }else {
                    row.createCell(3).setCellValue("");
                }
                //到货时间
                if(null != dto.getDeliveryDate()) {
                    row.createCell(4).setCellValue(sdf.format(dto.getDeliveryDate()));
                }else {
                    row.createCell(4).setCellValue("");
                }
                //总体积
                if(null != dto.getTotalAllVolume()) {
                    row.createCell(5).setCellValue(dto.getTotalAllVolume()+"m³");
                }else {
                    row.createCell(5).setCellValue("");
                }
                //箱型
                if(null != truckList && !truckList.isEmpty()) {
                    for (CarrierOrderTruck truckdto : truckList) {
                        if("面包车".equals(truckdto.getTruckType())) {
                            row.createCell(6).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("金杯车".equals(truckdto.getTruckType())){
                            row.createCell(7).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("2米7平板".equals(truckdto.getTruckType())){
                            row.createCell(8).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("3米8平板".equals(truckdto.getTruckType())){
                            row.createCell(9).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("4米2平板".equals(truckdto.getTruckType())){
                            row.createCell(10).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("4米2厢车".equals(truckdto.getTruckType())){
                            row.createCell(11).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("4米2高栏".equals(truckdto.getTruckType())){
                            row.createCell(12).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("6米8厢车".equals(truckdto.getTruckType())){
                            row.createCell(13).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("6米8高栏".equals(truckdto.getTruckType())){
                            row.createCell(14).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("7米6厢车".equals(truckdto.getTruckType())){
                            row.createCell(15).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("9米6厢车".equals(truckdto.getTruckType())){
                            row.createCell(16).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("9米6高栏".equals(truckdto.getTruckType())){
                            row.createCell(17).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("12米5厢车".equals(truckdto.getTruckType())){
                            row.createCell(18).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("13米高栏".equals(truckdto.getTruckType())){
                            row.createCell(19).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("16米5厢车".equals(truckdto.getTruckType())){
                            row.createCell(20).setCellValue(truckdto.getTruckNumber()+"辆");
                        }else if("17米5厢车".equals(truckdto.getTruckType())){
                            row.createCell(21).setCellValue(truckdto.getTruckNumber()+"辆");
                        }
                    }
                }
                //送货距离
                if(null != dto.getDistance()) {
                    row.createCell(22).setCellValue(dto.getDistance()+"km");
                }else {
                    row.createCell(22).setCellValue("");
                }
                //运输费用
                if(null != dto.getFreight()) {
                    row.createCell(23).setCellValue(dto.getFreight()+"元");
                }else {
                    row.createCell(23).setCellValue("");
                }
                //装货费用,卸货费用
                if(null != serveList && !serveList.isEmpty()) {
                    for (CarrierOrderServe servedto : serveList) {
                        if("装货".equals(servedto.getServiceType())) {
                            row.createCell(24).setCellValue(servedto.getPrice()+"元");
                        }else if("卸货".equals(servedto.getServiceType())){
                            row.createCell(25).setCellValue(servedto.getPrice()+"元");
                        }
                    }
                }
                //异常费用
                if(null != dto.getOtherCost()) {
                    row.createCell(26).setCellValue(dto.getOtherCost()+"元");
                }else {
                    row.createCell(26).setCellValue("");
                }
                //合计
                if(null != dto.getTotalCost()) {
                    row.createCell(27).setCellValue(dto.getTotalCost()+"元");
                }else {
                    row.createCell(27).setCellValue("");
                }
                //备注
                if(null != dto.getCarrierRemark()) {
                    row.createCell(28).setCellValue(dto.getCarrierRemark());
                }else {
                    row.createCell(28).setCellValue("");
                }
            }
        }
        return workboot;
    }

5.项目中引入第2步创建的模板,要与Service实现类中path路径对应:

6.效果:

7.XSSFWorkbook 做导出也可以不引入模板,通过workboot.createSheet("订单列表")创建sheet页,并设定表格样式,可实现相同的效果。但是我觉得导入模板比较简单,容易上手。

 如有错误,请指出,谢谢!

XSSFWorkbook实现导出excel的更多相关文章

  1. 关于poi导出excel方式HSSFWorkbook(xls).XSSFWorkbook(xlsx).SXSSFWorkbook.csv的总结

    1.HSSFWorkbook(xls) import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermo ...

  2. .net使用NPOI的XSSFWorkbook进行web开发中导出Excel

    之前也使用过NPOI导出excel,这次是因为在导出的excel里新增了几个列,正好超出了255的限制,所以又要改了. 今天主要出了4个问题: 1. Invalid column index (256 ...

  3. JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案

    现在很多系统都有导出excel的功能,总结一下自己之前写的,希望能帮到其他人,这里我用的是XSSFWorkbook,我们项目在winsang 用的Tomcat,LInux上用的weblogic服务器, ...

  4. Java导出excel

    一.介绍 常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中,很多时候需要实现导入.导出Excel的应用. ...

  5. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续篇)

    上周六我发表的文章<分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility>受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility ...

  6. C# NPOI导出Excel和EPPlus导出Excel比较

    系统中经常会使用导出Excel的功能. 之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异. NPIO官网地址:http: ...

  7. ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  8. .NET NPOI导出Excel详解

    NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...

  9. Java POI导入导出Excel

    1.异常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException 解决方法: 使用的poi的相关jar ...

随机推荐

  1. pyinstaller 打包

    [root@mhc nsf]# pip install pyinstallerCollecting pyinstaller  Downloading PyInstaller-3.3.tar.gz (3 ...

  2. C#给图片加文字水印

    public class TxtWaterMark { public enum WaterPositionMode { LeftTop,//左上 LeftBottom,//左下 RightTop,// ...

  3. 最长的相同节点值路径 · Longest Univalue Path

    [抄题]: Given a binary tree, find the length of the longest path where each node in the path has the s ...

  4. C#中一个窗口是一个类呢,还是一个窗口类的实例呢?(转)

    C#中一个窗口是一个类呢,还是一个窗口类的实例呢? 答: 没有一个人说到重点上. 一个窗口,它不是仅仅用一个类可以描述的: 首先,这个窗口的数据类型类型,是从Form类派生下来的,也就是说它的定义是一 ...

  5. getparameter()和getattribution()的区别的 java详细

    两个Web组件之间为转发关系时,转发源会将要共享 request范围内的数据先用setAttribute将数据放入到HttpServletRequest对象中,然后转发目标通过 getAttribut ...

  6. 我是如何在SQLServer中处理每天四亿三千万记录的(转)

    出处:http://www.cnblogs.com/marvin/p/HowCanIHandleBigDataBySQLServer.html 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章 ...

  7. ubuntu 16.04启用root和ssh登录

    1.设置用户密码 sudo passwd root 2.vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 末尾添加:greeter-show-m ...

  8. element onclick 动态创建元素并绑定onclick事件

    <html> <head> <meta charset="UTF-8"> <title>b</title> <sc ...

  9. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(11):XML和Annotation装配Bean的混合使用(@ImportResource)

    一.XML和Annotation装配Bean如何合理使用 引入第三方资源包中类的时候,建议使用XML配置,而使用自己编写的Java类的时候,推荐使用Annotation注解配置Bean. 二.关于注解 ...

  10. 浅谈https\ssl\数字证书

    全球可信的SSL数字证书申请:http://www.shuzizhengshu.com 在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕 ...