package com.geeke.utils;
import com.geeke.common.persistence.CrudDao;
import com.geeke.common.persistence.DataEntity;
import com.geeke.common.service.CrudService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.List;
/**
* excel 导出工具
*/
@Slf4j
@Transactional(readOnly = true)
//public abstract class ExcelUtils<D extends CrudDao<T>, T extends DataEntity<T>> extends CrudService<D, T> {
public abstract class ExcelUtils<T> {
/**
* 数据赋值给单元格
*/
protected abstract void setRowCellValue(T t, XSSFRow row,int length,XSSFCellStyle style);
/**
* 导出excel
* @param response 响应
* @param nameArr 列头
* @param list 数据
*/
public void exportExcel(HttpServletResponse response,String[] nameArr,List<T> list){
XSSFWorkbook xk = new XSSFWorkbook();
// 创建sheetName第一页页名
XSSFSheet sheet = xk.createSheet("测试");
// 字体样式
XSSFFont xssfFont = xk.createFont();
xssfFont.setBold(true);
xssfFont.setFontName("楷体");
xssfFont.setFontHeight(11);
// 表头样式
XSSFCellStyle headStyle = xk.createCellStyle();
// 继承字体样式
headStyle.setFont(xssfFont);
// 竖向居中,横向居中
headStyle.setVerticalAlignment(VerticalAlignment.CENTER);
headStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置标题一行的单元格的填充颜色为灰色
headStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
headStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// headStyle.setWrapText(true); // 设置自动换行
headStyle.setHidden(true); // 高度自动
// 创建第一行标题
int rowIndex = 0;
XSSFRow row1 = sheet.createRow(rowIndex++);
// 设置宽度
sheet.setDefaultColumnWidth(15);
for(int i=0; i<nameArr.length;i++){
XSSFCell Cell1 = row1.createCell(i);
Cell1.setCellValue(nameArr[i]);
Cell1.setCellStyle(headStyle);
}
for(int i=0; i<list.size(); i++){
this.setRowCellValue(list.get(i),sheet.createRow(rowIndex++),nameArr.length, xk.createCellStyle());
}
// 每次创建一行一列都需要调用方法可自己加工成工具类使用时只需要赋值即可
try {
// 附件名称和格式
response.addHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("学生信息.xlsx","UTF-8"));
response.setContentType("application/vnd.ms-excel");
// 转为二进制流进行吐出
ServletOutputStream os = response.getOutputStream();
xk.write(os);
os.flush();
os.close();
} catch (Exception e) {
log.error("Excel error", e);
}
}
}
excel 导出工具类
最新推荐文章于 2023-03-16 14:36:01 发布
本文介绍了一个抽象的ExcelUtils类,用于数据导入Excel,提供数据赋值给单元格的方法,并演示了如何导出带有列头和数据的Excel文件。核心功能围绕数据操作和文件导出,适合Spring框架下CRUD服务的扩展.
摘要由CSDN通过智能技术生成