【JAVA】easyExcel导出导入使用

EasyExcel是阿里巴巴开源插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据量大起来容易OOM,解决了POI并发造成的报错。主要解决方式:通过解压文件的方式加载,一行一行地加载,并且抛弃样式字体等不重要的数据,降低内存的占用。

EasyExcel在SpringBoot的集成 引入对应的pom依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.11</version>
</dependency>

excel常用注解

@ExcelProperty
@ColumnWith 列宽
@ContentFontStyle 文本字体样式
@ContentLoopMerge 文本合并
@ContentRowHeight 文本行高度
@ContentStyle 文本样式
@HeadFontStyle 标题字体样式
@HeadRowHeight 标题高度
@HeadStyle 标题样式
@ExcelIgnore 忽略项
@ExcelIgnoreUnannotated 忽略未注解

@Data
public class Member {/**
   * EasyExcel使用:导出时忽略该字段
   */
  @ExcelIgnore
  private Integer id;@ExcelProperty("用户名")
  @ColumnWidth(20)
  private String username;/**
   * EasyExcel使用:日期的格式化
   */
  @ColumnWidth(20)
  @ExcelProperty("出生日期")
  @DateTimeFormat("yyyy-MM-dd")
  private Date birthday;/**
   * EasyExcel使用:自定义转换器
   */
  @ColumnWidth(10)
  @ExcelProperty(value = "性别", converter = GenderConverter.class)
  private Integer gender;
}

GenderConverter转换器的代码实现如下:


public class GenderConverter implements Converter<Integer> {private static final String MAN = "男";
  private static final String WOMAN = "女";
​
​
  @Override
  public Class<?> supportJavaTypeKey() {
    // 实体类中对象属性类型
    return Integer.class;
  }@Override
  public CellDataTypeEnum supportExcelTypeKey() {
    // Excel中对应的CellData属性类型
    return CellDataTypeEnum.STRING;
  }@Override
  public Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty,
                                   GlobalConfiguration globalConfiguration) {
    // 从Cell中读取数据
    String gender = cellData.getStringValue();
    // 判断Excel中的值,将其转换为预期的数值
    if (MAN.equals(gender)) {
      return 0;
    } else if (WOMAN.equals(gender)) {
      return 1;
    }
    return null;
  }@Override
  public CellData<?> convertToExcelData(Integer integer, ExcelContentProperty excelContentProperty,
                                        GlobalConfiguration globalConfiguration) {
    // 判断实体类中获取的值,转换为Excel预期的值,并封装为CellData对象
    if (integer == null) {
      return new CellData<>("");
    } else if (integer == 0) {
      return new CellData<>(MAN);
    } else if (integer == 1) {
      return new CellData<>(WOMAN);
    }
    return new CellData<>("");
  }
}

字段注解 类注解
@ColumnWith(列宽)
@ColumnWidth(全局列宽)
@ExcelProperty(字段配置)
@HeadFontStyle(头样式)
@HeadRowHeight(标题高度)
@ContentFontStyle(内容字体样式)
@ContentRowHeight(内容高度)
@ExcelProperty
必要的一个注解,注解中有三个参数value,index,converter分别代表列明,列序号,数据转换方式 value和index只能二选一,通常不用设置converter
1.value 通过标题文本对应
2.index 通过文本行号对应
3.converter 转换器,通常入库和出库转换使用,如性别入库0和1,出库男和女

public class ImeiEncrypt {
    @ExcelProperty(value = "值")
    private String valueField;

    @ExcelProperty(value = 1,converter =IndustryIdConverter.class)
    private String indexField;

    @ExcelProperty(value = "值对应和转换器",converter =IndustryIdConverter.class)
    private String valueAndConverterField;
}

@ColumnWith 设置列宽度,只有一个参数value,value的单位是字符长度,最大可以设置255个字符,因为一个excel单元格最大可以写入的字符个数就是255个字符。

public class ImeiEncrypt {
    @ColumnWidth(value = 18)
    private String imei;
}

@ContentFontStyle 用于设置单元格内容字体格式的注解

参数:
fontName 字体名称
fontHeightInPoints 字体高度
italic 是否斜体
strikeout 是否设置删除水平线
color 字体颜色
typeOffset 偏移量
underline 下划线
bold 是否加粗
charset 编码格式

@ContentLoopMerge 用于设置合并单元格的注解

参数:
eachRow
columnExtend

@ContentRowHeight 用于设置行高

参数:
value 行高,-1代表自动行高

@ContentStyle 设置内容格式注解

参数:
dataFormat 日期格式
hidden 设置单元格使用此样式隐藏
locked 设置单元格使用此样式锁定
quotePrefix 在单元格前面增加`符号,数字或公式将以字符串形式展示
horizontalAlignment 设置是否水平居中
wrapped 设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见
verticalAlignment 设置是否垂直居中
rotation 设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°90°,07版本的Excel旋转角度区间为0°180°
indent 设置单元格中缩进文本的空格数
borderLeft 设置左边框的样式
borderRight 设置右边框样式
borderTop 设置上边框样式
borderBottom 设置下边框样式
leftBorderColor 设置左边框颜色
rightBorderColor 设置右边框颜色
topBorderColor 设置上边框颜色
bottomBorderColor 设置下边框颜色
fillPatternType 设置填充类型
fillBackgroundColor 设置背景色
fillForegroundColor 设置前景色
shrinkToFit 设置自动单元格自动大小

@HeadFontStyle 用于定制标题字体格式

参数 含义
fontName 设置字体名称
fontHeightInPoints 设置字体高度
italic 设置字体是否斜体
strikeout 是否设置删除线
color 设置字体颜色
typeOffset 设置偏移量
underline 设置下划线
charset 设置字体编码
bold 设置字体是否加粗

@HeadRowHeight 设置标题行行高

参数 含义
value 设置行高,-1代表自动行高

@HeadStyle 设置标题样式

参数 含义
dataFormat 日期格式
hidden 设置单元格使用此样式隐藏
locked 设置单元格使用此样式锁定
quotePrefix 在单元格前面增加`符号,数字或公式将以字符串形式展示
horizontalAlignment 设置是否水平居中
wrapped 设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见
verticalAlignment 设置是否垂直居中
rotation 设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°90°,07版本的Excel旋转角度区间为0°180°
indent 设置单元格中缩进文本的空格数
borderLeft 设置左边框的样式
borderRight 设置右边框样式
borderTop 设置上边框样式
borderBottom 设置下边框样式
leftBorderColor 设置左边框颜色
rightBorderColor 设置右边框颜色
topBorderColor 设置上边框颜色
bottomBorderColor 设置下边框颜色
fillPatternType 设置填充类型
fillBackgroundColor 设置背景色
fillForegroundColor 设置前景色
shrinkToFit 设置自动单元格自动大小

@ExcelIgnore 不将该字段转换成Excel

@ExcelIgnoreUnannotated 没有注解的字段都不转换

基础综合示例

//行高全部设为40
@HeadRowHeight(value = 40)
//标题全部居中
@HeadStyle(horizontalAlignment = CENTER)
public class SupervisionDailyExportProcessDTO {
	//"二、问题整改情况"是大标题,"序号"是大标题下面的子标题
    @ExcelProperty({"二、问题整改情况", "序号"})
    @ContentStyle(horizontalAlignment = CENTER)
    private Integer id;
    @ExcelProperty({"二、问题整改情况", "问题来源"})
    //单独设置这一列列宽为40
    @ColumnWidth(value = 40)
    @ContentStyle(wrapped = true, horizontalAlignment = CENTER)
    private String questionOrigin;
    @ExcelProperty({"二、问题整改情况", "督察点位"})
    @ColumnWidth(value = 40)
    @ContentStyle(wrapped = true, horizontalAlignment = CENTER)
    private String supervisionPoint;
    @ExcelProperty({"二、问题整改情况", "问题内容"})
    @ColumnWidth(value = 40)
    @ContentStyle(wrapped = true, horizontalAlignment = CENTER)
    private String questionContents;
    @ExcelProperty({"二、问题整改情况", "责任单位"})
    @ColumnWidth(value = 30)
    @ContentStyle(horizontalAlignment = CENTER)
    private String orgName;
    @ExcelProperty({"二、问题整改情况", "整改情况"})
    @ColumnWidth(value = 40)
    @ContentStyle(wrapped = true, horizontalAlignment = CENTER)
    private String processSituation;
}

补充颜色

NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillPattern 为单元格背景色的填充样式。
NPOI Excel 单元格背景颜色设置方法以及颜色对照表:

ICellStyle style = workbook.CreateCellStyle();
style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Red.Index;
style.FillPattern = FillPattern.SolidForeground;
 
ICell cell = workbook.CreateSheet().CreateRow(0).CreateCell(0);
cell.CellStyle = style;

在这里插入图片描述
在这里插入图片描述

easyExcel使用

EasyExcelUtils 导出工具类

package com.t10.framework.core.utils.excel;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.springframework.lang.Nullable;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.List;

/**
 * 导出工具类
 *
 * @author zlf
 */
public class EasyExcelUtils {
    private static final int MAXROWS = 1000000;
    /**
     * 导出公共方法 简单——单sheet  直接调用即可
     *
     * @param datas    要导出的数据集
     * @param clazz    导出的实体
     * @param fileName 导出文件名称
     * @param excludeFields  排除字段集合,集合中放入字段单词,莫放值
     * @throws IOException
     */
    public static void export(List datas, @Nullable Class<?> clazz, String fileName, String sheetName,List<String> excludeFields) throws IOException {
        ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletResponse response = sra.getResponse();
        //response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setContentType("application/octet-stream;charset=UTF-8");
        // 设置文件名
        String exportFileName = URLEncoder.encode(fileName, "UTF-8");
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
        response.setHeader("Content-Disposition", "attachment;filename=" + exportFileName + ExcelTypeEnum.XLSX.getValue());
        // 创建一个写出的单元格样式对象
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 设置水平对齐方式
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        // 设置填充前景色
        headWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
        // 创建写出Excel的字体对象
        WriteFont headWriteFont = new WriteFont();
        //设置字体高度
        //headWriteFont.setFontHeightInPoints((short) 10);
        headWriteCellStyle.setWriteFont(headWriteFont);
        headWriteCellStyle.setWrapped(true);
        // 创建一个写出的单元格样式对象
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        //设置内容靠中对齐
        //contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);

        // 边框设置 TODO: 细线-THIN   粗线-THICK  中线-MEDIUM   中虚线-MEDIUM_DASHED
        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);             // 设置单元格上边框为细线
        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);         // 设置单元格下边框为粗线
        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);         // 设置单元格左边框为中线
        contentWriteCellStyle.setBorderRight(BorderStyle.THIN); // 设置单元格右边框为中虚线
        // 设置行样式
        HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
        // 设置自定义自适应列宽样式
        //ExcelWidthStyleStrategy excelWidthStyleStrategy = new ExcelWidthStyleStrategy();
        ServletOutputStream out = response.getOutputStream();
        // 如果不用模板的方式导出的话,是doWrite
        if(CollectionUtil.isNotEmpty(excludeFields)){
            EasyExcel.write(out, clazz)
                    .excelType(ExcelTypeEnum.XLSX)
                    .autoCloseStream(true)
                    .registerWriteHandler(horizontalCellStyleStrategy)
                    .excludeColumnFieldNames(excludeFields)
                    .sheet(sheetName)
                    .doWrite(datas);
        }else {
            EasyExcel.write(out, clazz)
                    .excelType(ExcelTypeEnum.XLSX)
                    .autoCloseStream(true)
                    .registerWriteHandler(horizontalCellStyleStrategy)
                    //.registerWriteHandler(excelWidthStyleStrategy)
                    .sheet(sheetName)
                    .doWrite(datas);
        }
        out.flush();
        out.close();
    }

    /**
     * 根据Excel模板,批量导入数据  解析单Sheet
     *
     * @param file  导入的Excel
     * @param clazz 解析的类型
     * @return 解析完成的数据
     */
    public static List<?> importExcel(MultipartFile file, Class<?> clazz) {
        if (file == null || file.isEmpty()) {
            throw new RuntimeException("没有文件或者文件内容为空!");
        }
        List<?> dataList;
        BufferedInputStream ipt;
        try {
            InputStream is = file.getInputStream();
            // 用缓冲流对数据流进行包装
            ipt = new BufferedInputStream(is);
            // 数据解析监听器
            ExcelListener<?> listener = new ExcelListener<>();
            // 读取数据
            EasyExcel.read(ipt, clazz, listener).sheet().doRead();
            // 获取去读完成之后的数据
            dataList = listener.getList();
        } catch (Exception e) {
            throw new RuntimeException("数据导入失败!" + e);
        }
        return dataList;
    }

    /**
     * 根据Excel模板,批量导入数据  解析Sheet
     * @param file  导入的Excel
     * @param clazz 解析的类型
     * @param sheetNo  sheet编号
     * @return
     */
    public static List<?> importAppointSheet(MultipartFile file, Class<?> clazz,Integer sheetNo) {
        if (file == null || file.isEmpty()) {
            throw new RuntimeException("没有文件或者文件内容为空!");
        }
        List<?> dataList;
        BufferedInputStream ipt;
        try {
            InputStream is = file.getInputStream();
            // 用缓冲流对数据流进行包装
            ipt = new BufferedInputStream(is);
            // 数据解析监听器
            ExcelListener<?> listener = new ExcelListener<>();
            // 读取数据
            EasyExcel.read(ipt, clazz, listener).charset(Charset.forName("UTF-8")).sheet(sheetNo).doRead();
            // 获取去读完成之后的数据
            dataList = listener.getList();
        } catch (Exception e) {
            throw new RuntimeException("数据导入失败!" + e);
        }
        return dataList;
    }


}


ExcelListener Excel数据解析监听器, 数据解析方法异步执行

package com.sjasoft.framework.utils;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Excel数据解析监听器, 数据解析方法异步执行
 *
 * @param <T> Excel中数据的类型
 * @author zlf
 */
@Getter
@Setter
@NoArgsConstructor
public class ExcelListener<T> extends AnalysisEventListener<T> {
    // 加入一个判断标签,判断数据是否已经读取完
    private volatile boolean retryLock = false;

    // 解析完成后的数据集合, 监听对象初始化之后,立即初始化集合对象
    private final List<T> dataList = new ArrayList<>();

    // 每次最多导入条数
    private final int batchSize = 2000;


    /**
     * 获取解析后的数据集合, 如果数据还没有被解析完成,会对读取该集合的线程进行阻塞,直到数据读取完成之后,进行解锁。
     * 如果一次导入数据超过batchSize条,则以抛异常的形式阻止导入数据
     *
     * @return 解析后的数据集合
     */
    public List<T> getList() {
        while (true) {
            if (retryLock) {
                if (dataList.size() > batchSize) {
                    // 手动清空数据内存数据,减少内存消耗
                    dataList.clear();
                    throw new RuntimeException("一次最多导入" + batchSize + "条数据");
                } else {
                    return dataList;
                }
            }
        }
    }

    /**
     * Excel每解析一行数据,就会调用一次该方法
     *
     * @param data    one row value. Is is same as {@link AnalysisContext#readRowHolder()}
     * @param context analysis context
     */
    @Override
    public void invoke(T data, AnalysisContext context) {
        dataList.add(data);
    }

    /**
     * 读取表头内容
     *
     * @param headMap 表头部数据
     * @param context 数据解析上下文
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        // 在此处可以进行表头的校验,headMap对应的就是表头的数据
        // 在此处有个很奇怪的地方,就是当用户导入的文件没有任何表头的时候,也就是表头这一行为空
        // 表头检验则不会进行这个函数,且数据导入成功,所以这个地方要确认清楚
        // 最后我是在拿到所有数据,包括表头,再取第一行为表头进行校验
        //System.out.println("表头:" + headMap);
    }

    /**
     * 流中的数据解析完成之后,就会调用此方法
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 数据解析完成,解锁
        retryLock = true;
    }

    /**
     * 解析过程如果发生异常,会调用此方法
     */
    @Override
    public void onException(Exception exception, AnalysisContext context) {
        throw new RuntimeException("Excel数据异常,请检查或联系管理员!");
    }
}

ExcelWidthStyleStrategy 自适应宽度工具类

package com.sjasoft.framework.utils;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Cell;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {

    // 单元格的最大宽度
    private static final int MAX_COLUMN_WIDTH = 200;
    // 缓存(第一个Map的键是sheet的index, 第二个Map的键是列的index, 值是数据长度)
    private final Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>(8);

    // 重写设置列宽的方法
    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder,
                                  List<WriteCellData<?>> cellDataList,
                                  Cell cell,
                                  Head head,
                                  Integer relativeRowIndex,
                                  Boolean isHead) {
        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
        // 当时表头或者单元格数据列表有数据时才进行处理
        if (needSetWidth) {
            Map<Integer, Integer> maxColumnWidthMap = CACHE.computeIfAbsent(writeSheetHolder.getSheetNo(), k -> new HashMap<>(16));
            // 获取数据长度
            Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
            if (columnWidth >= 0) {
                if (columnWidth > MAX_COLUMN_WIDTH) {
                    columnWidth = MAX_COLUMN_WIDTH;
                }
                // 确保一个列的列宽以表头为主,如果表头已经设置了列宽,单元格将会跟随表头的列宽
                Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());

                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
                    maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
                    // 如果使用EasyExcel默认表头,那么使用columnWidth * 512
                    // 如果不使用EasyExcel默认表头,那么使用columnWidth * 256
                    // 如果是自己定义的字体大小,可以再去测试这个参数常量
                    writeSheetHolder
                        .getSheet()
                        .setColumnWidth(cell.getColumnIndex(), columnWidth * 512);
                }

            }
        }
    }

    /**
     * 获取当前单元格的数据长度
     */
    private Integer dataLength(List<WriteCellData<?>> cellDataList,
                               Cell cell,
                               Boolean isHead) {
        if (isHead) {
            return cell.getStringCellValue().getBytes().length;
        } else {
            WriteCellData 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;
                }
            }
        }
    }
}

调用

Controller

   @ApiOperation("导出日志明细")
    @PostMapping("/exportLogDetailInfo")
    public void exportLogDetailInfo(@RequestBody LogDetailParam detailParam) throws IOException{
        logService.exportLogDetailInfo(detailParam);
    }

service

  @SystemLog("导出日志明细")
    public void exportLogDetailInfo(LogDetailParam detailParam) throws IOException {
        List<LogDetailVo> logDetailList = tLogListDao.getLogDetailInfo(detailParam);
        if(CollectionUtil.isEmpty(logDetailList)){
            throw  new RuntimeException("未查询到数据,请调整条件后重新导出");
        }
        //导出文件名称
        String fileName = new String("导出日志明细" + DateUtil.format(new Date(),"yyyyMMddHHmmss"));
        EasyExcelUtils.export(logDetailList
            ,LogDetailVo.class,fileName,"导出日志明细");
    }
  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java easyexcel 导出示例代码如下: ``` import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.metadata.Sheet; import com.alibaba.excel.metadata.Table; import com.alibaba.excel.support.ExcelTypeEnum; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; public class EasyExcelExportExample { public static void main(String[] args) throws Exception { // 准备数据 List<List<String>> data = new ArrayList<>(); for (int i = 0; i < 10; i++) { List<String> item = new ArrayList<>(); item.add("字符串" + i); item.add("数字" + i); data.add(item); } // 写入数据 FileOutputStream out = new FileOutputStream("easyexcel-export.xlsx"); ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX); Sheet sheet1 = new Sheet(1, 0); sheet1.setSheetName("sheet1"); Table table1 = new Table(1); table1.setHead(new String[]{"字符串列", "数字列"}); writer.write0(data, sheet1, table1); writer.finish(); out.close(); } } ``` 这是一个简单的导出示例,其中写入了10行2列的数据,分别是 "字符串列" 和 "数字列"。示例代码会生成一个名为 "easyexcel-export.xlsx" 的 XLSX 格式的 Excel 文件。 ### 回答2: Java EasyExcel是一种用于Excel导入导出的开源组件。它提供了简单易用的API,可以方便地创建、读取和写入Excel文件。 以下是一个使用Java EasyExcel进行导出的示例: 首先,需要在项目中引入Java EasyExcel的依赖。可以在项目的pom.xml文件中添加以下依赖配置: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.2</version> </dependency> ``` 接下来,创建一个POJO类来表示Excel中的每一行数据。假设我们要导出一个包含学生信息的Excel文件,可以创建一个Student类,包含姓名、年龄和性别等属性。 然后,在导出时,可以通过EasyExcel的API来创建一个ExcelWriter对象,并指定导出的文件名和sheet名称。 ``` ExcelWriter excelWriter = EasyExcel.write("output.xlsx").build(); ``` 接下来,可以通过ExcelWriter对象的sheet()方法创建一个Sheet对象,并指定该sheet的名称和对应的实体类。 ``` Sheet sheet = new Sheet(1, 0, Student.class); sheet.setSheetName("学生信息"); excelWriter.write(dataList, sheet); ``` 为了将数据写入Excel文件,需要将数据封装到List中,然后通过ExcelWriter对象的write()方法进行写入。 最后,调用ExcelWriter对象的finish()方法将数据写入到Excel文件中,并关闭ExcelWriter对象。 ``` excelWriter.finish(); ``` 以上就是一个使用Java EasyExcel进行导出的示例。通过简单的几步操作,就可以方便地将数据导出到Excel文件中。Java EasyExcel的易用性使得Excel导入导出变得更加简单。 ### 回答3: Java easyexcel是一种用于导出Excel文件的简化工具,它可以帮助我们在Java程序中快速实现Excel文件的导出功能。 使用Java easyexcel导出示例的基本步骤如下: 1. 首先,我们需要在项目的依赖中添加Java easyexcel的相关库。可以通过Maven或者Gradle等工具来管理依赖。 2. 在Java程序中创建一个实体类,用来存储要导出到Excel中的数据。这个实体类需要使用注解来设置Excel的表头、列宽等属性。 3. 在Java程序中创建一个导出的方法,该方法使用Java easyexcel提供的API来生成Excel文件。我们可以在该方法中设置Excel的标题、表头、数据源等。 4. 调用导出方法,将Excel文件保存到指定的路径或者输出流中,即可完成Excel文件的导出过程。 下面是一个简单的Java easyexcel导出示例: ```java // 引入Java easyexcel的相关包 import com.alibaba.excel.EasyExcel; // 定义要导出到Excel中的数据实体类 public class Student { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private int age; // 省略 getter 和 setter 方法 } // 导出方法 public void exportExcel(List<Student> data, String filePath) { // 设置Excel的标题和表头 List<List<String>> head = new ArrayList<List<String>>(); List<String> title = new ArrayList<String>(); title.add("姓名"); title.add("年龄"); head.add(title); // 将数据导出到Excel文件中 EasyExcel.write(filePath) // 设置导出文件路径 .head(head) // 设置表头 .sheet("Sheet1") // 设置Sheet名称 .doWrite(data); // 导出数据 System.out.println("Excel导出成功!"); } // 测试导出方法 public static void main(String[] args) { // 创建要导出的数据列表 List<Student> data = new ArrayList<Student>(); data.add(new Student("张三", 20)); data.add(new Student("李四", 22)); data.add(new Student("王五", 18)); // 调用导出方法 exportExcel(data, "D:/student.xlsx"); } ``` 通过上述示例,我们可以看到,使用Java easyexcel导出Excel文件非常简单且高效。只需要少量的代码,就可以实现复杂的Excel导出功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值