EasyPOI->模版形式导出Excel(多Sheet)

在使用EasyPOI进行模版导出时,通常导出得都是单Sheet得Excel,代码可参考我的文章Easypoi导出excel

非模版形式导出excel可参考我的文章:EasyPOI->非模版形式导出Excel(多Sheet)

如需要导出图片到excel可参考我的文章: Easypoi模版形式导出excel导出图片

有时候因为有其他需求,需要导出多Sheet时,可以参考如下代码:

注意:该文章给出的是模版形式的多sheet导出excel

pom依赖:

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

代码如下:

   
@Controller
@RequestMapping(value = "easypoi")
public class EasypoiController {

   /**
     * 使用easypoi导出文件
     * 单sheet / 多sheet
     * @param response
     * @return
     */
    @RequestMapping(value="exportexceltest")
    @ResponseBody
    public String exportExcelTest(HttpServletResponse response){
        // 获取workbook对象
        // 单sheet或多sheet 只需要更改此处即可
        Workbook workbook = exportMoreSheetByTemplate() ;
        // 判断数据
        if(workbook == null) {
            return "fail";
        }
        // 设置excel的文件名称
        String excelName = "测试excel" ;
        // 重置响应对象
        response.reset();
        // 当前日期,用于导出文件名称
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String dateStr = "["+excelName+"-"+sdf.format(new Date())+"]";
        // 指定下载的文件名--设置响应头
        response.setHeader("Content-Disposition", "attachment;filename=" +dateStr+".xls");
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        // 写出数据输出流到页面
        try {
            OutputStream output = response.getOutputStream();
            BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);
            workbook.write(bufferedOutPut);
            bufferedOutPut.flush();
            bufferedOutPut.close();
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }

    /**
     * 模版多sheet导出示例
     * @return
     */
    public Workbook exportMoreSheetByTemplate(){
        // 查询数据,此处省略
        List<EasyPOIModel> list = new ArrayList<EasyPOIModel>();
        int count1 = 0 ;
        // 学生信息
        User user1 = new User("张三","男",20,"北京市东城区","篮球") ;
        User user2 = new User("李四","男",17,"北京市西城区","游泳") ;
        User user3 = new User("淑芬","女",34,"北京市丰台区","唱歌,跳舞") ;
        User user4 = new User("仲达","男",55,"北京市昌平区","象棋,足球") ;
        // sheet1内容
        EasyPOIModel easyPOIModel11 = new EasyPOIModel(String.valueOf(count1++),"信科",user1) ;
        EasyPOIModel easyPOIModel12 = new EasyPOIModel(String.valueOf(count1++),"生工",user2) ;
        EasyPOIModel easyPOIModel13 = new EasyPOIModel(String.valueOf(count1++),"化工",user3) ;
        EasyPOIModel easyPOIModel14 = new EasyPOIModel(String.valueOf(count1++),"信科",user4) ;
        list.add(easyPOIModel11) ;
        list.add(easyPOIModel12) ;
        list.add(easyPOIModel13) ;
        list.add(easyPOIModel14) ;
        // 存放数据map
        Map<String,Object> map1 = new HashMap<String, Object>() ;
        map1.put("list",list) ;
        // sheet2内容
        List<User> userList = new ArrayList<User>() ;
        userList.add(user1) ;
        userList.add(user2) ;
        userList.add(user3) ;
        userList.add(user4) ;
        map1.put("lists",userList) ;
        
        // 设置导出配置
        // 获取导出excel指定模版
        TemplateExportParams params = new TemplateExportParams("d:/项目测试文件夹/easypoiExampleMore.xls",true);
        // 设置sheetName,若不设置该参数,则使用得原本得sheet名称
        String[] sheetNameArray = {"班级信息","学生信息"} ;
        params.setSheetName(sheetNameArray);
        // 导出excel
        return ExcelExportUtil.exportExcel(params , map1 );
    }
}

excel模版如下:

表格1模版内容:

表格2模版内容:

运行代码后导出内容如下:

表格1导出后内容为:


表格2导出后内容为:

需要注意得是,在填充不同sheet时使用到得数据列表,是存放在同一个map对象中的,所以此时需要对两个列表的key进行区分,同时编写模版内容表达式时,也需要取对应的key进行遍历操作,如图框选部分所示:

同时,如需修改sheet的名称的话,可以通过sheetName参数进行指定,如图:

模版的sheet名称:

代码:

导出后的sheet名称:

所以在使用时需要多加注意。

补充说明:

如上图所示,在创建TemplateExportParams模版对象时,若需要输出多sheet的话,需要在指定模版路径后,追加一个参数,默认值为false,设置为true即表示会输出模版中的全部sheet,否则只会输出第一个sheet。请各位小伙伴多加注意。

以上便是使用easypoi模版形式导出多sheet的全部内容。

其他相关使用请参考原文章:

https://gitee.com/jeecg/easypoi

EasyPOI参考资料:

EasyPoi教程_V1.0

如您有其他问题,希望可以通过留言得形式及时交流,有书写错误和可优化的地方也希望及时提出,感谢
 

  • 27
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 58
    评论
我作为AI语言模型,无法使用easypoi进行编程操作。但我可以为您提供easypoi导出excel的示例代码,您可以参考。 以下是一个使用easypoi的示例代码,用于将数据导出Excel模板中: ```java // 导出Excel public void exportExcel() { // 定义表头 List<ExcelExportEntity> headerList = new ArrayList<>(); headerList.add(new ExcelExportEntity("序号", "id")); headerList.add(new ExcelExportEntity("姓名", "name")); headerList.add(new ExcelExportEntity("年龄", "age")); // 定义数据 List<Map<String, Object>> dataList = new ArrayList<>(); Map<String, Object> data1 = new HashMap<>(); data1.put("id", "1"); data1.put("name", "张三"); data1.put("age", "18"); dataList.add(data1); Map<String, Object> data2 = new HashMap<>(); data2.put("id", "2"); data2.put("name", "李四"); data2.put("age", "20"); dataList.add(data2); // 导出Excel ExportParams exportParams = new ExportParams(); exportParams.setTitle("人员信息表"); exportParams.setSheetName("Sheet1"); exportParams.setStyle(ExcelExportStyler.class); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, headerList, dataList); // 将Excel写入磁盘 try { FileOutputStream fos = new FileOutputStream("D:\\person.xls"); workbook.write(fos); fos.close(); } catch (IOException e) { e.printStackTrace(); } } ``` 以上代码中,我们定义了表头和数据,并使用`ExcelExportUtil.exportExcel()`方法将它们导出Excel模板中。同时,我们还可以通过`ExportParams`对象设置标题、工作表名称和样式等参数。 请注意,在导出Excel模板之前,您需要先安装easypoi和poi-ooxml依赖包。
评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值