java easyexcel 写入数据到excel中的多个sheet中

controller方法:

@ApiOperation("下载导入结果")
    @RequestMapping(value = "/downloadUploadResut", method = RequestMethod.POST)
    public void batchDownload(HttpServletRequest request,
                              HttpServletResponse response,
                              @RequestBody  DownloadAssetResultDto  downloadAssetResultDto) throws Exception {

        if(downloadAssetResultDto==null || downloadAssetResultDto.getUploadId()==null){
            throw  new RRException("上传数据ID为空,请先上传数据");
        }

        request.setCharacterEncoding("UTF-8");
        String prefix=".xlsx";
        String fileName="uploadResult";
        String userAgent = request.getHeader("User-Agent");
        String     downLoadPath = URLDecoder.decode(fileName, "UTF-8");
        System.out.println(downLoadPath);
        try {

            response.setContentType("application/vnd.ms-excel");
            fileName = URLEncoder.encode(fileName, "ISO8859-1");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            response.setHeader("filename",fileName);
            Integer uploadId = downloadAssetResultDto.getUploadId();
            downloadAssetService.downloadUploadResut(response,uploadId);


        } catch (Exception e) {
            e.printStackTrace();
        }

    }

service业务类实现方法:

@Override
    public void downloadUploadResut(HttpServletResponse response,Integer  uploadId) {
        ExcelWriter excelWriter = null;
        try {
            CustomCellWriteHandler customCellWriteHandler = new CustomCellWriteHandler();
            excelWriter = EasyExcel.write(response.getOutputStream()).build();
           
            List<BizObjectModeExport> bizObjectUploadData =bizObjectUploadData(uploadId);
            //创建一个sheet
            WriteSheet writeSheet = EasyExcel.writerSheet( "sheet1").head(BizObjectModeExport.class).registerWriteHandler(customCellWriteHandler).build();
            excelWriter.write(bizObjectUploadData, writeSheet);


            
            List<LogicEntityModelExport> logicEntityUploadData = logicEntityUploadData(uploadId);
            //创建一个新的sheet
            writeSheet = EasyExcel.writerSheet("sheet2").head(LogicEntityModelExport.class).registerWriteHandler(customCellWriteHandler).build();
            excelWriter.write(logicEntityUploadData, writeSheet);

            
            List<AttributeModelExport> attributeUploadData = attributeUploadData(uploadId);
            writeSheet = EasyExcel.writerSheet("sheet3").head(AttributeModelExport.class).registerWriteHandler(customCellWriteHandler).build();
            excelWriter.write(attributeUploadData, writeSheet);


           
            List<TechMetadataModelExport> techMetadataUploadData = techMetadataUploadData(uploadId);
            writeSheet = EasyExcel.writerSheet("shee4").head(TechMetadataModelExport.class).registerWriteHandler(customCellWriteHandler).build();
            excelWriter.write(techMetadataUploadData, writeSheet);



          /*
            // 这里需要设置不关闭流
            EasyExcel.write(response.getOutputStream(), BizObjectModeExport.class)
                    .registerWriteHandler(new CustomCellWriteHandler())
                    .autoCloseStream(Boolean.TRUE).sheet("sheet")
                    .doWrite(bizObjectUploadData);*/
        } catch (Exception e) {
            // 重置response
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            Map<String, String> map = new HashMap<String, String>();
            map.put("flag", "failure");
            map.put("message", "下载文件失败" + e.getMessage());
            try {
                response.getWriter().println(JSON.toJSONString(map));
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }finally{
            if(excelWriter!=null){
                excelWriter.finish();
            }

        }
    }

CustomCellWriteHandler.java

package cn.getech.data.manager.service.impl;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.util.CollectionUtils;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import org.apache.poi.ss.usermodel.Cell;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName CustomCellWriteHandler
 * @Description TODO
 * @Author Getech
 * @Date 2020/11/13 16:33
 */
public class CustomCellWriteHandler  extends AbstractColumnWidthStyleStrategy {

    private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>();

    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
        if (needSetWidth) {
            Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());
            if (maxColumnWidthMap == null) {
                maxColumnWidthMap = new HashMap<>();
                CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
            }

            Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
            if (columnWidth >= 0) {
                if (columnWidth > 255) {
                    columnWidth = 255;
                }

                Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
                    maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
                    writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
                }

            }
        }
    }

    private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {
        if (isHead) {
            return cell.getStringCellValue().getBytes().length;
        } else {
            CellData cellData = cellDataList.get(0);
            CellDataTypeEnum type = cellData.getType();
            if (type == null) {
                return -1;
            } else {
                switch (type) {
                    case STRING:
                        return cellData.getStringValue().getBytes().length;
                    case BOOLEAN:
                        return cellData.getBooleanValue().toString().getBytes().length;
                    case NUMBER:
                        return cellData.getNumberValue().toString().getBytes().length;
                    default:
                        return -1;
                }
            }
        }
    }
}

其中一个excelmodel.java

package com.cwp.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class BizObjectModel {


   
    @ExcelProperty(value = "编码",order = 1)
    private String code;


   
    @ExcelProperty(value = "名称",order = 5)
    private String name;

   
}

 引入alibaba easyexcel依赖片段:

 <!-- alibaba excel依赖 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
            <exclusions>
                <exclusion>
                    <artifactId>cglib</artifactId>
                    <groupId>cglib</groupId>
                </exclusion>
            </exclusions>
        </dependency>

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 使用EasyExcel可以很方便地写入多个sheet。具体步骤如下: 1. 创建一个ExcelWriter对象,指定输出文件路径和文件名。 2. 创建多个WriteSheet对象,每个WriteSheet对象代表一个sheet。 3. 分别向每个WriteSheet对象写入数据。 4. 最后调用ExcelWriter对象的finish方法,将数据写入到文件。 示例代码如下: ```java // 创建ExcelWriter对象 ExcelWriter writer = EasyExcel.write("output.xlsx").build(); // 创建WriteSheet对象 WriteSheet sheet1 = EasyExcel.writerSheet(, "Sheet1").build(); WriteSheet sheet2 = EasyExcel.writerSheet(1, "Sheet2").build(); // 向sheet1写入数据 List<List<String>> data1 = new ArrayList<>(); data1.add(Arrays.asList("姓名", "年龄", "性别")); data1.add(Arrays.asList("张三", "20", "男")); data1.add(Arrays.asList("李四", "25", "女")); writer.write(data1, sheet1); // 向sheet2写入数据 List<List<String>> data2 = new ArrayList<>(); data2.add(Arrays.asList("学科", "成绩")); data2.add(Arrays.asList("语文", "90")); data2.add(Arrays.asList("数学", "80")); writer.write(data2, sheet2); // 完成写入操作 writer.finish(); ``` 以上代码将会生成一个名为output.xlsx的Excel文件,其包含两个sheet,分别为Sheet1和Sheet2,每个sheet都包含了对应的数据。 ### 回答2: EasyExcel是一个功能强大的Java Excel操作类库,可以轻松地操作Excel文件和各种操作。当需要在单个Excel文件写入多个Sheet时,我们可以选择使用EasyExcel。 要在EasyExcel写入多个Sheet,需要先创建EasyExcel对象,并使用Sheet对象设置Sheet名称,然后将Sheet数据添加到Excel对象。以下是示例代码: ```java public class WriteMultipleSheets { public static void main(String[] args) { // 创建excel对象 ExcelWriter excelWriter = EasyExcel.write("data.xlsx").build(); // 创建sheet对象 WriteSheet sheet1 = EasyExcel.writerSheet(0, "Sheet1").build(); WriteSheet sheet2 = EasyExcel.writerSheet(1, "Sheet2").build(); // 写入sheet1数据 excelWriter.write(getDataList(), sheet1); // 写入sheet2数据 excelWriter.write(getDataList(), sheet2); // 关闭excel对象 excelWriter.finish(); } //获取数据列表 private static List<Object> getDataList() { // TODO: 获取数据列表 return new ArrayList<>(); } } ``` 在上面的代码,首先创建ExcelWriter对象并设置Excel文件路径。然后使用EasyExcel.writerSheet()方法创建Sheet对象,并传递Sheet名称和索引号参数。最后,通过ExcelWriter.write()方法将Sheet数据添加到Excel对象。 同时,我们还需要根据实际情况将需要写入数据以List对象返回。在示例代码,我们定义了一个名为getDataList()的方法来获取数据列表。 总之,EasyExcel非常方便地实现了在单个Excel文件写入多个Sheet的操作。只需要创建Sheet对象和使用ExcelWriter.write()方法添加数据即可。使用EasyExcel,你可以更快速、更简单地处理Excel文件! ### 回答3: EasyExcel 是一个 Java 操作 Excel 工具,它支持 Excel 文件的读取、写入及各种格式转换,扩展了 Apache POI,它比较方便、易用,容易上手,目前在Java领域被广泛使用。有时候我们需要将数据写入Excel 文件的多个Sheet,下面是如何使用 EasyExcelJava 实现将数据写入多个Sheet的方法。 首先需要导入 EasyExcel 的依赖,可以访问官方网站进行下载,也可以通过 Maven 进行依赖管理。在 pom.xml 文件添加以下依赖: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 其,需要注意的是版本号,目前 EasyExcel 已经更新到了 3.0 版本,但写入多个 Sheet 的方式没有变化,上述方式仍然适用。 下面是使用 EasyExcel 实现将数据写入多个 Sheet 的代码: ```java public static void writeExcel() { String fileName = "test.xlsx"; List<List<String>> data1 = new ArrayList<>(); for (int i = 0; i < 10; i++) { List<String> row = new ArrayList<>(); row.add("Sheet1-" + i); row.add("Sheet1-" + i); data1.add(row); } List<List<String>> data2 = new ArrayList<>(); for (int i = 0; i < 10; i++) { List<String> row = new ArrayList<>(); row.add("Sheet2-" + i); row.add("Sheet2-" + i); data2.add(row); } try { OutputStream outputStream = new FileOutputStream(fileName); ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX); WriteSheet sheet1 = new WriteSheet(); sheet1.setSheetName("Sheet1"); sheet1.setHead(Arrays.asList("列1", "列2")); sheet1.setClazz(String.class); excelWriter.write0(data1, sheet1); WriteSheet sheet2 = new WriteSheet(); sheet2.setSheetName("Sheet2"); sheet2.setHead(Arrays.asList("列1", "列2")); sheet2.setClazz(String.class); excelWriter.write0(data2, sheet2); excelWriter.finish(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } ``` 上述代码,首先创建一个输出流,以便 EasyExcel数据写入到指定的 Excel 文件。然后创建一个 ExcelWriter 对象,并指定输出流和 Excel 文件类型。接下来,创建两个 WriteSheet 对象,并分别指定它们的名称、头部信息和类型。最后,通过 ExcelWriter 对象的 write0 方法将数据写入到对应的 WriteSheet ,并使用 finish 方法关闭 ExcelWriter 对象,保存数据,并关闭输出流。 以上就是使用 EasyExcel数据写入多个 Sheet 的方法。值得一提的是,EasyExcel 还支持读取 Excel 文件,并可以直接将数据读取到相应的 Java 对象,具体实现可以参考官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成伟平2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值