首页 > 其他分享 >简单导出更新版---详细

简单导出更新版---详细

时间:2024-06-13 15:23:09浏览次数:11  
标签:style return 导出 CellStyle param 更新版 --- workbook import

1.导入依赖

<!--easy-poi-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
2.编写一个导出的类的方法

package com.jx.util.api.util;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Component;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.net.URLEncoder;
import java.util.List;

@Component
public class MyExcelImportUtil {


/**
* 简单导出数据
* @param tage 导出的表的名称
* @param list 要导出的数据
* @param t 导出表的实体
* @param response 响应流
* @param <T>
* @throws Exception
*/
public static <T> void simplyExportExcel(String tage,List<T> list, T t, HttpServletResponse response) throws Exception {
ExportParams params = new ExportParams();
params.setSheetName(tage);
params.setStyle(ExcelStyleUtil.class);
Workbook workbook = ExcelExportUtil.exportExcel(params, t.getClass(), list);

// 设置响应的ContentType和Header,告诉浏览器下载文件
response.setContentType("application/vnd.ms-excel");
response.setHeader("Access-Control-Expose-Headers","Content-Disposition");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(tage+".xls", "UTF-8"));


ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
workbook.write(byteArrayOutputStream);
byte[] bytes = byteArrayOutputStream.toByteArray();

ServletOutputStream servletOutputStream = response.getOutputStream();

int bufferSize = 1024 * 1024; // 1 兆字节
int offset = 0;

while (offset < bytes.length) {
int remaining = bytes.length - offset;
int chunkSize = Math.min(remaining, bufferSize);
servletOutputStream.write(bytes, offset, chunkSize);
offset += chunkSize;
servletOutputStream.flush();
}

servletOutputStream.close();
}
}
额外附加处理样式的类
package com.jx.util.api.util;

import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
import org.apache.poi.ss.usermodel.*;

/**
* @author 丁庆洋
*/
public class ExcelStyleUtil implements IExcelExportStyler {
private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT");
private static final short FONT_SIZE_TEN = 11;
private static final short FONT_SIZE_ELEVEN = 13;
private static final short FONT_SIZE_TWELVE = 10;
/**
* 大标题样式
*/
private CellStyle headerStyle;
/**
* 每列标题样式
*/
private CellStyle titleStyle;
/**
* 数据行样式
*/
private CellStyle styles;

public ExcelStyleUtil(Workbook workbook) {
this.init(workbook);
}

/**
* 初始化样式
*
* @param workbook
*/
private void init(Workbook workbook) {
this.headerStyle = initHeaderStyle(workbook);
this.titleStyle = initTitleStyle(workbook);
this.styles = initStyles(workbook);
}

/**
* 大标题样式
*
* @param color
* @return
*/
@Override
public CellStyle getHeaderStyle(short color) {
return headerStyle;
}

/**
* 每列标题样式
*
* @param color
* @return
*/
@Override
public CellStyle getTitleStyle(short color) {
return titleStyle;
}

/**
* 数据行样式
*
* @param parity 可以用来表示奇偶行
* @param entity 数据内容
* @return 样式
*/
@Override
public CellStyle getStyles(boolean parity, ExcelExportEntity entity) {
return styles;
}

/**
* 获取样式方法
*
* @param dataRow 数据行
* @param obj 对象
* @param data 数据
*/
@Override
public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) {
return getStyles(true, entity);
}

/**
* 模板使用的样式设置
*/
@Override
public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {
return null;
}

/**
* 初始化--大标题样式
*
* @param workbook
* @return
*/
private CellStyle initHeaderStyle(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
Font font = getFont(workbook, FONT_SIZE_TWELVE, true);
font.setColor(Font.COLOR_RED);
style.setFont(font);
return style;
}

/**
* 初始化--每列标题样式
*
* @param workbook
* @return
*/
private CellStyle initTitleStyle(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, true));
//背景色
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
return style;
}

/**
* 初始化--数据行样式
*
* @param workbook
* @return
*/
private CellStyle initStyles(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
style.setFont(getFont(workbook, FONT_SIZE_TEN, false));
style.setDataFormat(STRING_FORMAT);
return style;
}

/**
* 基础样式
*
* @return
*/
private CellStyle getBaseCellStyle(Workbook workbook) {
CellStyle style = workbook.createCellStyle();
//下边框
style.setBorderBottom(BorderStyle.THIN);
//左边框
style.setBorderLeft(BorderStyle.THIN);
//上边框
style.setBorderTop(BorderStyle.THIN);
//右边框
style.setBorderRight(BorderStyle.THIN);
//水平居中
style.setAlignment(HorizontalAlignment.CENTER);
//上下居中
style.setVerticalAlignment(VerticalAlignment.CENTER);
//设置自动换行
style.setWrapText(false);
return style;
}

/**
* 字体样式
*
* @param size 字体大小
* @param isBold 是否加粗
* @return
*/
private Font getFont(Workbook workbook, short size, boolean isBold) {
Font font = workbook.createFont();
//字体样式
font.setFontName("宋体");
//是否加粗
font.setBold(isBold);
//字体大小
font.setFontHeightInPoints(size);
return font;
}
}
3.接下来就是正式开始处理数据
(1)对导出的实体进行处理

 时间的格式一样要注意 格式不对 会导致 解析错误 导出不合理的数据

 一定记得加produces="application/octet-stream" 切记!!!!!!!

 处理数据 如果想要文字 进行封装方法处理 

 当查询条件是ids时 用

  来处理

 这是用的时候注意事项

 

 

还有就是如果入参是多个id的时候 用post请求来写 要不前端笨比不好处理

标签:style,return,导出,CellStyle,param,更新版,---,workbook,import
From: https://www.cnblogs.com/yzxsx/p/18245953

相关文章

  • MyBatis-Plus更新字段为null时,update语句为null字段不生效的解决方法
    MyBatis-Plus更新字段为null时,update语句为null字段不生效的解决方法https://blog.csdn.net/y2020520/article/details/1328272061)修改MyBatis-Plus全局默认策略缺点:这样做会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为nullmybatis-p......
  • Docker安装-基于wsl
    本文参考:Windows下wsl2安装Linux原生Docker使用wsl2而非Dockerdesktop安装Docker,体验完全接近Linux的使用Docekr方式。并解决wsl2中Docker启动不了的问题。一、安装wsl2官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/install-manual启......
  • 一起来学javascript-axios
       <!--//AJAX的封装插件——Axios。  //什么是Axios  //Axios是一个基于Promise的HTTP库,可以用于浏览器和Node.js,支持VanillaJS、Angular、React、Vue等框架。  //简单的理解就是对Ajax的封装,且具有易用、简洁、高效等特点。  ......
  • stable-diffusion-webui 环境配置
    链接:AUTOMATIC1111/stable-diffusion-webui:StableDiffusionwebUI(github.com)查看python版本:   安装完python之后,打开工程,配置虚拟环境 下载安装对应的依赖库,其中的torch相关三个库选择与自己cuda相关的版本安装,我的pytorch选的是2.1.2,下载网址:download.pytorch.o......
  • 微信小程序毕业设计-打印室预约系统项目开发实战(附源码+演示视频+LW)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • pc端element表格实现动态列及导出xlsx
    一、首先实现动态列,为了防止刷新恢复初始状态,用pinia持久化存储实现效果:实现代码://主页面代码//template<el-buttontype="primary"@click="selectDialogRef.openDialog()">简表设置</el-button><el-table:data="dataList"><el-table-columnv-if=&q......
  • 设计模式-桥接模式
    桥接模式桥接模式(bridge)也成为桥梁模式,接口(Interface)模式,柄体(HandleAndBody)模式,是将抽象部分与它的具体实现部分分离,使得它们可以独立的变化,属于结构型模式。桥接模式主要是通过组合的方式建立两个类之间的关系,而不是继承。但又类似于多重继承方案,但是多重继承方案往往违......
  • 图像处理与视觉感知复习--彩色图像处理
    文章目录三原色原理及其两种应用常用彩色模型及其应用领域各种颜色模型的转换彩色图像处理三原色原理及其两种应用三基色原理自然界中绝大多数的颜色都可看作是由红、绿、蓝三种颜色组合而成;自然界中的绝大多数的颜色都可以分解成红、绿、蓝这三种颜色。这即是色度......
  • Web--CSS基础
    文章目录定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动flex布局响应式布局定义方式行内样式表直接定义在style属性中,作用于当前标签<imgsrc="/imges/logo.jpg"alt=""style="width=400">内部样式表定义在style标签中......
  • es-spark +docker
    本项目使用es+spark的技术,并且采用容器进行项目的构建FROMubuntu:20.04RUNapt-getupdate-y&&apt-getinstallvim-y&&apt-getinstallwget-y&&apt-getinstallssh-y&&apt-getinstallopenjdk-8-jdk-y&&apt-getinstallsudo-y&......