Java利用Easyexcel导出excel表格的示例代码
作者:羁客% 发布时间:2023-05-30 23:36:04
标签:Java,Easyexcel,导出,excel
1.导入 EasyExcel Maven包
<!--easyexcel 导出excel依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.7</version>
</dependency>
2.配置
配置表格表头样式,以及内容的写入方式
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.*;
import java.util.List;
public class EasyExcelWriteHandler implements SheetWriteHandler {
/**
* 表头数据
*/
private final List<String> headsDatas;
/**
* 内容数据
*/
private final List<List<String>> bodyDatas;
/**
* 表头样式
*/
private CellStyle cellStyle;
/**
* 内容样式
*/
private CellStyle cellStyleHeader;
public EasyExcelWriteHandler(List<String> headsDatas, List<List<String>> bodyDatas) {
this.headsDatas = headsDatas;
this.bodyDatas = bodyDatas;
}
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Workbook workbook = writeWorkbookHolder.getWorkbook();
Sheet sheet = workbook.getSheetAt(0);
// 表头样式
if (cellStyleHeader == null) {
cellStyleHeader = workbook.createCellStyle();
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleHeader.setFillForegroundColor(IndexedColors.WHITE.getIndex());
Font font = workbook.createFont();
// 字体大小
font.setFontHeightInPoints((short) 16);
// 字体
font.setFontName("微软雅黑");
//加粗
font.setBold(true);
cellStyleHeader.setFont(font);
}
// 内容样式
if (cellStyle == null) {
cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
Font font = workbook.createFont();
font.setFontName("微软雅黑");
font.setFontHeightInPoints((short) 12);
cellStyle.setFont(font);
}
//表头内容
Row row = sheet.getRow(0);
if (row == null) {
row = sheet.createRow(0);
}
//遍历写入表头
for (int rowInt = 0; rowInt < headsDatas.size(); rowInt++) {
//获取列内容
String cellValue = headsDatas.get(rowInt);
//根据表头内容设置表头列宽(自适应表头宽度)
sheet.setColumnWidth(rowInt, cellValue.length() * 875);
Cell cell = row.getCell(rowInt);
if (cell == null) {
cell = row.createCell(rowInt);
}
cell.setCellStyle(cellStyleHeader);
cell.setCellValue(cellValue);
//遍历写入内容
if (rowInt < bodyDatas.size()) {
for (int bodyRowInt = 0; bodyRowInt < bodyDatas.get(rowInt).size(); bodyRowInt++) {
Row row0 = sheet.getRow(bodyRowInt + 1);
if (row0 == null) {
row0 = sheet.createRow(bodyRowInt + 1);
}
Cell cell0 = row0.getCell(rowInt);
if (cell0 == null) {
cell0 = row0.createCell(rowInt);
}
cell0.setCellStyle(cellStyle);
cell0.setCellValue(bodyDatas.get(rowInt).get(bodyRowInt));
}
}
}
}
}
3.输出Excel到前端
public static void easyUtil1(ExcelBody excelBody) throws IOException {
//转换内容数据
List<List<String>> list2 = new ArrayList<>();
for (List<Object> objects : excelBody.getBodyDatas()) {
List<String> strs = new ArrayList<>();
for (Object object : objects) {
strs.add(String.valueOf(object));
}
list2.add(strs);
}
//设置表名
String simpleDateFormat = new String((new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())).getBytes(), "UTF-8");
//设置字符编码
response.setCharacterEncoding("utf-8");
//设置内容类型
response.setContentType("application/vnd.ms-excel");
//设置标题
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(excelBody.getFileName() + simpleDateFormat + ".xlsx", "utf-8"));
//核心代码
//方式一:
//EasyExcel.write(response.getOutputStream()).head(list2).sheet("sheet1").doWrite(list2);
//方式二:
ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream());
writerBuilder.registerWriteHandler(new EasyExcelWriteHandler(excelBody.getHeads(), list2));
ExcelWriter excelWriter = writerBuilder.build();
ExcelWriterSheetBuilder writerSheetBuilder = EasyExcel.writerSheet("Sheet1");
excelWriter.write(new ArrayList<>(), writerSheetBuilder.build());
excelWriter.finish();
}
@Data
public class ExcelBody {
/**
* 文件名
*/
private String fileName;
/**
* 表头
*/
private List<String> heads;
/**
* 数据体
*/
private List<List<Object>> bodyDatas;
}
来源:https://blog.csdn.net/qq_37778018/article/details/125786699
0
投稿
猜你喜欢
- 先给大家展示下效果图,如果感觉不错,请参考实现思路详解Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安
- 1. 介绍结合上面的ReentrantLock类图,ReentrantLock实现了Lock接口,它的内部类Sync继承自AQS,绝大部分使
- 本文和大家一起做一个带箭头的圆角矩形菜单,大概长下面这个样子:要求顶上的箭头要对准菜单锚点,菜单项按压反色,菜单背景色和按压色可配置。最简单
- 出处:https://www.cnblogs.com/SunSpringeclipse下面创建的Maven项目,使用mybatis。ecli
- 安卓使用SmsManager实现发送短信,供大家参考,具体内容如下关键代码实现package com.example.sms; import
- Map 中ConcurrentHashMap是线程安全的,但不是所有操作都是,例如get()之后再put()就不是了,这时使用merge()
- 传值就是将实参的值传到所调用的函数里面,实参的值并没有发生变化,默认传值的有int型,浮点型,bo
- 五子棋AI算法也算是一个典型的游戏AI算法,一些棋类的AI算法都可以参考实现,下面是Java实现代码棋盘抽象接口import java.ut
- 本文实例为大家分享了Java实现斗地主小游戏的具体代码,供大家参考,具体内容如下原理图:斗地主过程: * 1
- 本文实例为大家分享了C# Winform实现进度条显示的具体代码,供大家参考,具体内容如下创建一个窗体,命名为StartForm添加一个ti
- Eclipse 中的 GitEclipse 附带了一个名为 Egit 的插件,它提供了一个非常完善的 Git 操作接口。 这个插件可以通过切
- 要说this和super就不得不说Java的封装和继承了,首先说封装,这是一种思想,算不上一种技术,核心思想就是将对象的同一行为和状态看成是
- 背景在使用Spring Boot Mvc的项目中,使用Long类型作为id的类型,但是当前端使用Number类型接收Long类型数据时,由于
- 最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地
- springboot获取项目目录路径springboot部署后获取项目的路径//获取跟目录(绝对路径)File path = new Fil
- 本文实例讲述了C#实现顺序表(线性表)的方法。分享给大家供大家参考,具体如下:基本思想是使用数组作为盛放元素的容器,数组一开始的大小要实现确
- 本文实例讲述了Java编程实现汉字按字母顺序排序的方法。分享给大家供大家参考,具体如下:String[] str0 = new String
- 简单工厂模式的概念就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创
- Process#waitFor()阻塞问题有时需要在程序中调用可执行程序或脚本命令:Process process = Runtime.ge
- 本文实例讲述了Java基于外观模式实现美食天下食谱功能。分享给大家供大家参考,具体如下:一、模式定义外观模式,是软件工程师常用的一种软件设计