SpringBoot导出excel

6 篇文章 0 订阅
2 篇文章 0 订阅

SpringBoot导出excel

引入maven依赖:

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>4.1.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>4.1.0</version>
</dependency>

工具类:

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;

import java.text.SimpleDateFormat;
import java.util.Date;

public class ExcelOutUtil {
    /**
     * 导出Excel
     * @param sheetName
     *        sheet名称
     * @param title
     *        标题
     * @param values
     *        内容
     * @param wb
     *        HSSFWorkbook对象
     * @param head
     *        标题头
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName,
                                               String[] title, String[][] values, HSSFWorkbook wb,String head) {
        // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
        if (wb == null) {
            wb = new HSSFWorkbook();
        }
        // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);
        // 第三步,在sheet中添加表头第1行
        HSSFRow row = sheet.createRow(1);

        // 第四步,设置样式
        HSSFCellStyle cellStyle = wb.createCellStyle();
        HSSFFont font = wb.createFont();
        font.setFontHeightInPoints((short)11);
        cellStyle.setFont(font);
        cellStyle.setAlignment(HorizontalAlignment.CENTER);//居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        cellStyle.setWrapText(true);//自动换行

        // 创建总标题头
        HSSFRow rowHead = sheet.createRow(0);
        HSSFCell cellRowHead = rowHead.createCell(0);
        cellRowHead.setCellValue(head);
        cellRowHead.setCellStyle(cellStyle);
        rowHead.setHeightInPoints(36);
        CellRangeAddress cra = new CellRangeAddress(0,0,0,6);//合并单元格
        sheet.addMergedRegion(cra);//引用设计样式

        // 声明列对象
        HSSFRow row1=sheet.createRow(1);
        HSSFCell cell = row1.createCell(1);
        // 创建标题
        for (int i = 0; i < title.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(cellStyle);
        }

        // 创建内容
        for (int i = 0; i < values.length; i++) {
            row = sheet.createRow(i + 2);
            row.setHeightInPoints(20);//设置行高
            int width=10;//设置宽度
            sheet.setColumnWidth(0,256*width+384);
            sheet.setColumnWidth(1,256*width+384);
            sheet.setColumnWidth(2,256*width+384);
            sheet.setColumnWidth(3,256*width+384);
            sheet.setColumnWidth(4,256*width+384);
            sheet.setColumnWidth(5,256*width+384);
            sheet.setColumnWidth(6,256*width+484);
            for (int j = 0; j < values[i].length; j++) {
                // 将内容按顺序赋给对应的列对象
                row.createCell(j).setCellValue(values[i][j]);
                row.setRowStyle(cellStyle);
            }
        }
        return wb;
    }

    // 根据参数返回一个二维数组
    public static String[][] getContent(int length) {
        return new String[length][];
    }

    /**
     * 用于时间命名
     * @return
     */
    public String getDataTime(){
        Date date = new Date();
        SimpleDateFormat dateFormat= new SimpleDateFormat("yyyyMMddhhmmss");
        String dataTime = dateFormat.format(date);
        return dataTime;
    }

    /**
     * 格式化列的类型
     * @param cell 列
     * @return 统一返回字符串
     */
	/*public static String formatCell(HSSFCell cell) {
		if (cell == null) {
			return "";
		} else {
			//return String.valueOf(cell.getRichStringCellValue()) 返回字符串
			if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {//布尔型
				return cell.getBooleanCellValue() ? "true" : "false";
			} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {//数值型
				cell.setCellType(cell.CELL_TYPE_STRING);//数值转为字符串类型
				return cell.getStringCellValue();
			}else if(cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){//公式型
				return cell.getCellFormula();
			}else if(cell.getCellType() == HSSFCell.CELL_TYPE_STRING){//字符串
				return cell.getStringCellValue();
			}else {
				return "";
			}
		}
	}*/
}

cotroller类:

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.project.main.excel.out.entity.WorkersVO;
import com.project.main.excel.out.service.WorkersOutService;
import com.project.main.excel.out.utils.ExcelOutUtil;
import com.project.main.utils.R;

@RestController
@CrossOrigin
public class WorkersOutController {
	
	@Autowired
	private WorkersOutService workersService;
	
	@GetMapping("/excelDownload")
    public R excelDownload(HttpServletRequest request, HttpServletResponse response){
        //Map<String, Object> map = getQueryMap();
        List<WorkersVO> workersList = workersService.getWorkersToExcelOut();//要导出的数据集合
        //excel标题
        String[] title = {"工号","姓名","年龄","性别","居住地址","职位","入职日期"};
        // excel文件名
        ExcelOutUtil eu = new ExcelOutUtil();
        String dataName = eu.getDataTime();
        String fileName = dataName+"员工信息表.xls";
        String[][] content = ExcelOutUtil.getContent(workersList.size());
        String sheetName = "信息";
        String head = "员工信息表";
        for (int i = 0; i <workersList.size(); i++) {
            content[i] = new String[title.length];
            WorkersVO workersVO = workersList.get(i);
            content[i][0] = workersVO.getCardNum();
            content[i][1] = workersVO.getWorkerName();
            content[i][2] = workersVO.getAge();
            content[i][3] = workersVO.getSex();
            content[i][4] = workersVO.getAddress();
            content[i][5] = workersVO.getPosition();
            content[i][6] = workersVO.getWorkDate();
           
        }
        HSSFWorkbook hwb = ExcelOutUtil.getHSSFWorkbook(sheetName, title, content,
                null, head);
        try {
            this.setResponseHeader(response, fileName);
            OutputStream os = response.getOutputStream();
            hwb.write(os);
            os.flush();
            os.close();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return R.ok("导出成功...");
    }

    private Map<String, Object> getQueryMap() {
		// TODO Auto-generated method stub
		return null;
	}

	// 发送响应流方法
    public void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            try {
                fileName = new String(fileName.getBytes(),"ISO-8859-1");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            response.setContentType("application/octet-stream;charset=ISO8859-1");
            response.setHeader("Content-Disposition", "attachment;filename="
                    + fileName);
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
        } catch (Exception ex) {
            //log.info("导出excel功能,发送响应流方法异常!");
            ex.printStackTrace();
        }
    }
}

此导出excel适用于简易型导出,无过多的样式修饰
导出样例
在这里插入图片描述

更多开源开发软件,可在微信公众号搜索"小逸分享"前去提取哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值