excel 导出工具类

本文介绍了一个抽象的ExcelUtils类,用于数据导入Excel,提供数据赋值给单元格的方法,并演示了如何导出带有列头和数据的Excel文件。核心功能围绕数据操作和文件导出,适合Spring框架下CRUD服务的扩展.
摘要由CSDN通过智能技术生成
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);
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值