精华内容
下载资源
问答
  • easyPoi多sheet导出excel

    2019-01-20 23:13:20
    easyPoi多sheet导出实例代码,附有数据库sql,支持表头、合并单元格,通过注解形式导出excel,代码简介、轻松实现导出excel功能。框架使用struts2+spring+hibernate。
  • easypoi多sheet导出

    千次阅读 2018-05-08 09:53:40
    sheet 得名称 params.setSheetName(tableInfo.getName()); Map dataMap = new HashMap(); dataMap.put( "title" ,params) ; // 参数 dataMap.put( "entity" ,Field. class ) ; // 数据类型 dataMap.put...
    public class TableInfo {
    
        public String name;
    
        public String pkName;
    
        public List<Field> fieldList = new ArrayList<>();
        //getter/setter
    }

    List<TableInfo> tableInfos = getTableInfos();
    //创建参数集合
    List<Map<String,Object>> sheetsList = new ArrayList<>() ;
    
    for (TableInfo tableInfo : tableInfos) {
        ExportParams params = new ExportParams() ;
        // 设置sheet得名称
        params.setSheetName(tableInfo.getName());
        Map dataMap = new HashMap<>();
        dataMap.put("title",params) ;//参数
        dataMap.put("entity",Field.class) ;//数据类型
        dataMap.put("data",tableInfo.getFieldList());//数据集合
        sheetsList.add(dataMap);
    }
    Workbook wb=ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);

    展开全文
  • EasyPoi 多sheet导出功能实现

    万次阅读 2018-12-22 19:11:59
    EasyPoi 多sheet导出 最近接到一个导出excel功能的需求,该功能主要难点是 sheet页导出 合并单元格(跨行、跨列) 表头合并 我开始的想法是如果采用poi来实现这个功能,业务逻辑可能会有点复杂,于是我使用了...

    EasyPoi 多sheet导出

    序言:之前一直想开始写博客,都没有时间行动起来,今天终于开始了我的第一篇博客…

    最近接到一个导出excel功能的需求,该功能主要难点是

    1. 多sheet页导出
    2. 合并单元格(跨行、跨列)
    3. 多表头合并

    我开始的想法是如果采用poi来实现这个功能,业务逻辑可能会有点复杂,于是我使用了easyPoi——一个so easy的工具,它的特点就是非常方便,用jQuery的一句来说就是:write Less,Do More。

    话不多说,接下来分享一下我的代码(我使用的是SSH框架搭建环境)

    一、引入maven jar包

    <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.2.0</version>
    </dependency>
    <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.2.0</version>
    </dependency>
    <dependency>
           <groupId>cn.afterturn</groupId>
           <artifactId>easypoi-annotation</artifactId>
           <version>3.2.0</version>
    </dependency>
    

    二、编写导出的实体类(使用注解形式)
    1、DeptUtil 类

    @ExcelTarget("deptUtil")
    public class DeptUtil {
    
        @Excel(name = "部门编号", width = 30 , needMerge = true)
        private Integer id;
    
        @Excel(name = "部门名称", width = 30 , needMerge = true)
        private String deptName;
    
        @ExcelCollection(name = "员工信息")
        private List<EmpUtil> emps;
    
    
    	....省略getter、setter方法
    

    2、EmpUtil类

    @ExcelTarget("empUtil")
    public class EmpUtil{
    
        @Excel(name = "序号", width = 30, isColumnHidden = true)
        private Integer id;
    
        @Excel(name = "员工姓名", width = 30, groupName = "基本信息")
        private String empName;
    
        @Excel(name = "年龄", width = 30, type = 10, groupName = "基本信息")
        private Integer age;
    
        @Excel(name = "入职时间", width = 30, groupName = "工作信息", format = "yyyy/MM/dd HH:mm")
        private Date hiredate;
    
        @Excel(name = "薪酬", width = 30, type = 10, groupName = "工作信息")
        private BigDecimal salary;
    
    
    	....省略getter、setter方法
    

    3、核心代码

    public String export(){
    
            Workbook workBook = null;
            try {
                List<DeptUtil> exportList = exportService.exportList();
                System.err.println(JSONArray.toJSONString(exportList));
    
                // 创建参数对象(用来设定excel得sheet得内容等信息)
                ExportParams deptExportParams = new ExportParams();
                // 设置sheet得名称
                deptExportParams.setSheetName("员工报表1");
                // 创建sheet1使用得map
                Map<String, Object> deptExportMap = new HashMap<>();
                // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName
                deptExportMap.put("title", deptExportParams);
                // 模版导出对应得实体类型
                deptExportMap.put("entity", DeptUtil.class);
                // sheet中要填充得数据
                deptExportMap.put("data", exportList);
    
                ExportParams empExportParams = new ExportParams();
                empExportParams.setSheetName("员工报表2");
                // 创建sheet2使用得map
                Map<String, Object> empExportMap = new HashMap<>();
                empExportMap.put("title", empExportParams);
                empExportMap.put("entity", DeptUtil.class);
                empExportMap.put("data", exportList);
    
                // 将sheet1、sheet2、sheet3使用得map进行包装
                List<Map<String, Object>> sheetsList = new ArrayList<>();
                sheetsList.add(deptExportMap);
                sheetsList.add(empExportMap);
                // 执行方法
                workBook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
                fileName = URLEncoder.encode("员工报表导出", "UTF-8");
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                workBook.write(outputStream);
                outputStream.flush();
                byte[] byteArray = outputStream.toByteArray();
                excelStream = new ByteArrayInputStream(byteArray,0,byteArray.length);
                outputStream.close();
    
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                if(workBook != null) {
                    try {
                        workBook.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return "success";
        }
    

    三、效果展示
    在这里插入图片描述有一个问题就是如果sheet填充的数据源是一样的,那么第二个sheet的内容就会为空
    在这里插入图片描述不过一般上要实现多sheet页展示,内容应该是不一样的,这里只是作为实现效果展示,就采用了同一个数据获取源。

    以上就是所有内容了,如果想要学习更多可以查阅easyPoi的api(http://easypoi.mydoc.io/)
    另外附上我的项目源码:https://github.com/wzqonly/easyPoi_export
    喜欢的欢迎点赞O(∩_∩)O

    展开全文
  • easyPoi 多sheet导出excel

    2020-06-18 17:44:55
    springboot使用easypoi 实现多sheet的数据导出 1 导入依赖 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <...

    springboot使用easypoi 实现多sheet的数据导出

    easyPoi开发文档

    1 导入依赖

    <dependency>
    			<groupId>cn.afterturn</groupId>
    			<artifactId>easypoi-spring-boot-starter</artifactId>
    			<version>4.1.1</version>
    		</dependency>
    

    2 导出

    
    import cn.afterturn.easypoi.excel.annotation.Excel;
    import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ExcelTarget("personBO")
    public class PersonBO implements Serializable {
    
        @Excel(name = "姓名", width = 20)
        private String name;
    
        @Excel(name = "年龄", width = 20)
        private String age;
    
    
    }
    
    import cn.afterturn.easypoi.excel.annotation.Excel;
    import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ExcelTarget("orgBO")
    public class OrgBO implements Serializable {
    
       @Excel(name = "部门名称", width = 20)
        private String deptName;
       @Excel(name = "部门地址", width = 20)
        private String addr;
    
    }
    
     
    import cn.afterturn.easypoi.excel.ExcelExportUtil;
    import cn.afterturn.easypoi.excel.entity.ExportParams;
    import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @Controller
    public class ExportController {
    
        @ResponseBody
        @RequestMapping("/export")
        public void downloadGridorgMemList(ModelMap map, HttpServletRequest request, HttpServletResponse response) {
    
            //导出数据
            List<PersonBO> personList = new ArrayList<>();
            List<OrgBO> orgList = new ArrayList<>();
            PersonBO personBO1 = new PersonBO();
            PersonBO personBO2 = new PersonBO();
            personBO1.setName("jim");
            personBO1.setAge("20");
            personBO2.setName("tom");
            personBO2.setAge("30");
            personList.add(personBO1);
            personList.add(personBO2);
            OrgBO orgBO1 = new OrgBO();
            OrgBO orgBO2 = new OrgBO();
            orgBO1.setDeptName("部门1");
            orgBO1.setAddr("地址1");
            orgBO2.setDeptName("部门2");
            orgBO2.setAddr("地址1");
            orgList.add(orgBO1);
            orgList.add(orgBO2);
    
    
            // 创建参数对象 这里定义的格式要跟数据文件格式保持一致
            ExportParams exportParamsPerson = new ExportParams("人员信息","人员sheet", ExcelType.XSSF);
            ExportParams exportParamsOrg = new ExportParams("部门信息","部门sheet", ExcelType.XSSF);
    
    
            // 创建sheet1使用得map
            Map<String, Object> personMap = new HashMap<>(4);
            // title的参数为ExportParams类型
            personMap.put("title", exportParamsPerson);
            // 模版导出对应得实体类型
            personMap.put("entity", PersonBO.class);
            // sheet中要填充得数据
            personMap.put("data", personList);
    
            // 创建sheet2使用得map
            Map<String, Object> dutyDataMap = new HashMap<>(4);
            dutyDataMap.put("title", exportParamsOrg);
            dutyDataMap.put("entity", OrgBO.class);
            dutyDataMap.put("data", orgList);
            // 将sheet1和sheet2使用得map进行包装
            List<Map<String, Object>> sheetsList = new ArrayList<>();
            sheetsList.add(personMap);
            sheetsList.add(dutyDataMap);
            // 执行方法
            Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.XSSF);
            try {
                // 告诉浏览器用什么软件可以打开此文件
                response.setHeader("content-Type", "application/vnd.ms-excel");
                //设置浏览器响应头对应的Content-disposition
                response.setHeader("Content-Disposition",
                        "attachment;filename=" + URLEncoder.encode("测试统计.xlsx", "UTF-8"));
                //编码
                response.setCharacterEncoding("UTF-8");
                workbook.write(response.getOutputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    workbook.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    }
    
    展开全文
  • 需求 : 实现 Excel 的 sheet 导出功能, 并且对数据样式进行相应的排版 直属领导让做成这样 我做成这样 拼尽全力啊!真难搞 1. 首先获取到数据 @RequestMapping(path = "/{id}/export", method = RequestMethod....

    1111

    导出五张表的数据写了四天,真难啊

    需求 : 实现 Excel 的多 sheet 导出功能, 并且对数据样式进行相应的排版

    在这里插入图片描述
    在这里插入图片描述
    直属领导让做成这样

    我做成这样
    在这里插入图片描述
    在这里插入图片描述
    拼尽全力啊!真难搞

    1. 首先获取到数据

    @RequestMapping(path = "/{id}/export", method = RequestMethod.GET)
    	@ApiOperation(value = "任务导出", notes = "")
    	public void exportReport(@PathVariable Long projectId, @PathVariable Long id, HttpServletResponse response) throws IOException, ParseException {
    		DeptProject deptProject = projectService.getById(projectId);
    		StringBuilder fileName = new StringBuilder();
    		if (deptProject != null ){
    			fileName.append(deptProject.getName() + ".xls");
    		}
    		List<DeptProjectReportExport> exportList = new ArrayList<>();
    		List<ReportMoneyExport> reportMoneyExportList = new ArrayList<>();
    		for (DeptProjectReportMoneySchedule moneySchedule : reportService.getById(id).getMoneySchedules()) {
    			ReportMoneyExport moneyExport = new ReportMoneyExport();
    			DeptProjectMoney deptProjectMoney = projectService.getMoney(moneySchedule.getMoneyId());
    			moneyExport.setSeq(deptProjectMoney.getSeq());
    			moneyExport.setName(deptProjectMoney.getName());
    			moneyExport.setMoney(deptProjectMoney.getMoney());
    			moneyExport.setSurplusMoney(deptProjectMoney.getMoney()*(1-moneySchedule.getSchedule()*0.01));
    			moneyExport.setSchedule(moneySchedule.getSchedule());
    			reportMoneyExportList.add(moneyExport);
    		}
    		if (null != deptProject ) {
    			for (ReportProjectWork reportProjectWork : deptProject.getReportProjectWorks()) {
    				DeptProjectReportExport reportExport = new DeptProjectReportExport();
    				List<DeptProjectWorkExport> works = new ArrayList<>();
    				reportExport.setTaskName(reportProjectWork.getChain());
    				for (DeptProjectWork deptProjectWork : reportProjectWork.getDeptProjectWorks()) {
    					List<DeptProjectReportWorkSchedule> workSchedules = deptProjectReportService.findByDeptProjectWorkIdAndReportId(deptProjectWork.getId(),id);
    					DeptProjectWorkExport deptProjectWorkExport = new DeptProjectWorkExport();
    					deptProjectWorkExport.setName(deptProjectWork.getName());
    					deptProjectWorkExport.setProgress(deptProjectWork.getProgress());
    					deptProjectWorkExport.setResponsibleName(deptProjectWork.getResponsibleName());
    					deptProjectWorkExport.setAssistName(deptProjectWork.getAssistName());
    					for (DeptProjectReportWorkSchedule schedule : workSchedules){
     						switch (schedule.getMonth()){
     						    case 1: deptProjectWorkExport.setJanuary(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 2: deptProjectWorkExport.setFebruary(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 3: deptProjectWorkExport.setMarch(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 4: deptProjectWorkExport.setApril(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 5: deptProjectWorkExport.setMay(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 6: deptProjectWorkExport.setJune(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 7: deptProjectWorkExport.setJuly(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 8: deptProjectWorkExport.setAugust(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 9: deptProjectWorkExport.setSeptember(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 10: deptProjectWorkExport.setOctober(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 11: deptProjectWorkExport.setNovember(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						    case 12: deptProjectWorkExport.setDecember(this.addShow(schedule.getStatus(),schedule.getInstructions())); break;
     						}
    					}
                        works.add(deptProjectWorkExport);
    				}
    				reportExport.setWorks(works);
    				exportList.add(reportExport);
    			}
    		}
    

    对于数据的获取,因为涉及到了多张表就在这里进行数据的拼接了,
    先拿到对应表的数据,封装到新建的导出实体中.

    	// 第一个导出实体  DeptProjectReportExport
    	@Excel(name="所属任务", needMerge = true )
        private String taskName;
      
        @ExcelCollection(name = "工作完成情况")
        private List<DeptProjectWorkExport> works;
    
    
    	// 包含的works 对应的实体 DeptProjectWorkExport
    	@Excel(name = "工作名称",height = 50)
    	private String name;
    	@Excel(name = "一月")
    	private String january;
    	@Excel(name = "二月")
    	private String february;
    	@Excel(name = "三月")
    	private String march;
    	@Excel(name = "四月")
    	private String april;
    	@Excel(name = "五月")
    	private String may;
    	@Excel(name = "六月")
    	private String june;
    	@Excel(name = "七月")
    	private String july;
    	@Excel(name = "八月")
    	private String august;
    	@Excel(name = "九月")
    	private String september;
    	@Excel(name = "十月")
    	private String october;
    	@Excel(name = "十一月")
    	private String november;
    	@Excel(name = "十二月")
    	private String december ;
    	
    	@Excel(name = "进度", suffix = "%")
    	private Integer progress;
    	@Excel(name = "负责人")
    	private String responsibleName;
    	@Excel(name = "协助人")
    	private String assistName;
    

    将获取到的数据封装进对应的实体中就行了,

    需要注意的点就在,使用集合存储的时候,就会出现添加上一级的大的单元格合并的情况, 此时就要考虑怎么出了 , 不是单个的数据都需要使用集合来存储,而不是你每次重新插入,那样会导致只保留最后一个数据,之前插入的数据会被覆盖掉.

    @ExcelCollection(name = “工作完成情况”) 这个为标注集合的注解



    第二个sheet内容

    	// ReportMoneyExport 第二个sheet的实体
    	@Excel(name = "序号")
    	private Integer seq;
    	private Long projectId;
    	@Excel(name = "预算名称",height = 30, width = 20)
    	private String name;
    	@Excel(name = "金额", width = 20)
    	private Double money;
    	@Excel(name = "剩余金额", width = 20)
    	private Double surplusMoney;
    	@TableField(exist = false)
    	@Excel(name = "使用进度", suffix = "%")
    	private Integer schedule; 
    

    上面也进行了对第二个sheet的数据的封装

    接下来就是重点了 ,导出多个sheet

    		/**
             *  第一个sheet的内容拼接
             * */
            ExportParams reportWorkExportParams = new ExportParams();
            reportWorkExportParams.setSheetName("工作完成情况");
            // 创建sheet1使用得map
            Map<String, Object> reportWorkExportMap = new HashMap<>();
            // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName
            reportWorkExportMap.put("title", reportWorkExportParams);
            // 模版导出对应得实体类型
            reportWorkExportMap.put("entity", DeptProjectReportExport.class);
            // sheet中要填充得数据
            reportWorkExportMap.put("data", exportList);
            /**
             *  第二个sheet的内容拼接
             * */
            ExportParams reportMoneyExportParams = new ExportParams();
            reportMoneyExportParams.setSheetName("经费使用情况");
            // 创建sheet1使用得map
            Map<String, Object> reportMoneyExportMap = new HashMap<>();
            // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName
            reportMoneyExportMap.put("title", reportMoneyExportParams);
            // 模版导出对应得实体类型
            reportMoneyExportMap.put("entity", ReportMoneyExport.class);
            // sheet中要填充得数据
            reportMoneyExportMap.put("data", reportMoneyExportList);
            List<Map<String, Object>> sheetsList = new ArrayList<>();
            sheetsList.add(reportWorkExportMap);
            sheetsList.add(reportMoneyExportMap);
            // 执行方法
            Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
    		UploadUtil.setFileDownloadHeader(response,fileName.toString());
    		workbook.write(response.getOutputStream());
    

    查看代码上的注解可知, 需要创建你需要的数量的导出实体,和sheet的名称对应的数据封装好,
    最后创建 List<Map<String, Object>> sheetsList = new ArrayList<>();
    来对于创建好的数据进行导出
    sheetsList.add(reportWorkExportMap);
    sheetsList.add(reportMoneyExportMap);

    进入流的方式为:
    Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
    UploadUtil.setFileDownloadHeader(response,fileName.toString());
    workbook.write(response.getOutputStream());

    就完成啦

    参考救命的文档 = https://blog.csdn.net/baidu_36821021/article/details/85216855
    官方文档-easypoi = http://doc.wupaas.com/docs/easypoi/easypoi-1c0u9bn89hr5u

    展开全文
  • 依赖 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web<...easypoi多sheet导入导出工封装工具类 import cn.afterturn.easypoi.excel.ExcelE
  • easyPOI多sheet导出

    2020-07-18 16:02:01
    * 多sheet导出 * @param response 流 * @param list 导出的数据 * @param fileName 表头标题名称 */ public static void exportMoreSheet(HttpServletResponse response,List<Map<String,
  • /** * Created by xzz on 2018/1/10. */@Controller@RequestMapping(value = "easypoi")public class EasypoiController { /** * 使用easypoi导出文件 * 单sheet / 多sheet * @param response * @return 
  • 导入依赖 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.2.0</version> ...单sheet导出 @Po...
  • POM: <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.2.0</version> </dependency> <dependenc...
  • easypoi map 多sheet导出

    2019-03-15 08:35:00
    * 一个excel 创建sheet * * @param list * 个Map key title 对应表格Title key entity 对应表格对应实体 key data * Collection 数据 * @return */ public static Workbook exportExcel(List, Object>...
  • EasyPOI一次导出多sheet单元格 使用ExcelExportUtil的以下方法: /** * 一个excel 创建多个sheet * * @param list * 多个Map key title 对应表格Title key entity 对应表格对应实体 key data * Collection ...
  • easypoi,多sheet导出,excel注解导出

    千次阅读 2018-07-11 14:17:43
    // 将sheet1和sheet2使用得map进行包装 List sheetsList = new ArrayList() ; sheetsList .add (dataMap1) ; sheetsList .add (dataMap2) ; Workbook workbook = ExcelExportUtil .exportExcel ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,232
精华内容 492
关键字:

easypoi多sheet导出