Springboot利用poi导出excel下载

Springboot利用poi导出excel下载

因为项目中之前的做法是用反射获取属性,所以demo中也是用的反射,我看网上很多文章都是存入一个List中,不知道这两种哪种更何合适一点,或者有什么更好的方法也请大佬们赐教。

pom

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.13</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.13</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

Service

import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
@Service
public class StudentService {

    public List<Student> getList(Student student, int index, int size) {
        Student student1 = new Student("张三", 90, 18);
        Student student2 = new Student("李四", 85, 17);
        Student student3 = new Student("王五", 70, 19);
        List<Student> list = new ArrayList<>();
        list.add(student1);
        list.add(student2);
        list.add(student3);
        return list;
    }
}

Controller

import lombok.Cleanup;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;

@RestController
public class StudentController {

    @Autowired
    public StudentService studentService;

    @RequestMapping("/exportStudentExcel")
    public ResponseEntity<byte[]> exportExcel(Student student) {

        List<Student> list = studentService.getList(student, 0, 10); // 每次只需要改这几行

        String fileName = "学生成绩统计表"; // 每次只需要改这几行
        String[] getters = {"getName", "getScore", "getAge"}; // 每次只需要改这几行
        String[] headers = {"姓名", "分数", "年龄"}; // 每次只需要改这几行

        Workbook wb = ExcelUtils.createWorkBook(list, getters, headers,student.getClass()); // 每次只需要改这几行

        @Cleanup ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            wb.write(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] content = os.toByteArray();
        HttpHeaders httpHeaders = new HttpHeaders();
        try {
            fileName = URLEncoder.encode(fileName, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        httpHeaders.setContentDispositionFormData("attachment", fileName + ".xlsx");
        return new ResponseEntity<byte[]>(content, httpHeaders, HttpStatus.OK);
    }
}

ExcelUtils

public class ExcelUtils {
    /**
     * 创建excel文档
     *
     * @param getters list中map的key数组集合
     * @param headers excel的列名
     */
    public static Workbook createWorkBook(List list, String[] getters, String[] headers, Class clazz) {

        List<Method> methods = getMethodsByStrs(getters, clazz);

        // 创建.xlsx工作簿
        Workbook wb = new XSSFWorkbook();
        // 创建第一个sheet(页),并命名
        Sheet sheet = wb.createSheet("sheet1");
        // 手动设置列宽.第一个参数表示要为第几列设,第二个参数表示列的宽度,n为列高的像素数.

        for (int i = 0; i < getters.length; i++) {
            sheet.setColumnWidth((short) i, (short) (35.7 * 200));
        }

        // 创建第一行
        Row header = sheet.createRow(0);

        // 创建两种单元格格式
        CellStyle cellStyle1 = wb.createCellStyle();
        CellStyle cellStyle2 = wb.createCellStyle();

        // 创建两种字体
        Font font1 = wb.createFont(); // 标题字体
        Font font2 = wb.createFont(); // 正文字体

        // 标题加粗
        font1.setBoldweight(Font.BOLDWEIGHT_BOLD);

        // 设置两种单元格的样式
        setCellStype(cellStyle1, font1);
        setCellStype(cellStyle2, font2);

        //设置header
        for (int i = 0; i < headers.length; i++) {
            Cell cell = header.createCell(i);
            cell.setCellValue(headers[i]);
            cell.setCellStyle(cellStyle1);
        }

        //设置data
        int headersNum = 1;
        for (int i = 0; i < list.size(); i++) {
            Row row = sheet.createRow(i + headersNum);
            for (int j = 0; j < methods.size(); j++) {
                try {
                    Object invoke = methods.get(j).invoke(list.get(i));
                    if (invoke != null) {
                        row.createCell(j).setCellValue(invoke.toString());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return wb;
    }

    private static void setCellStype(CellStyle cellStyle, Font font) {
        font.setFontHeightInPoints((short) 10);
        font.setColor(IndexedColors.BLACK.getIndex());
        cellStyle.setFont(font);
        cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
        cellStyle.setBorderRight(CellStyle.BORDER_THIN);
        cellStyle.setBorderTop(CellStyle.BORDER_THIN);
        cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
        cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
    }

    private static List<Method> getMethodsByStrs(String[] getters, Class clazz) {
        List<Method> list = new ArrayList<>();
        for (String getter : getters) {
            try {
                list.add(clazz.getDeclaredMethod(getter));
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
}

原文地址:https://www.cnblogs.com/n031/p/11119764.html

时间: 2024-07-29 06:46:02

Springboot利用poi导出excel下载的相关文章

Excel导出学习之道:Java Web利用POI导出Excel简单例子

采用Spring mvc架构: Controller层代码如下 [java] view plaincopy @Controller public class StudentExportController{ @Autowired private StudentExportService studentExportService; @RequestMapping(value = "/excel/export") public void exportExcel(HttpServletReq

struts2中利用POI导出Excel文档并下载

1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: 1 package com.tydic.eshop.action.feedback; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.FileInputStream; 6 import java.io.IOException; 7 import

利用poi导出Excel

import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Date;import java.util.ArrayList;import java.util.List; import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.

JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框

导入包这一些不多说,直接贴出关键代码,JSP只要点一个Action链接就行. poi包我是用:poi-3.11-20141221.jar 亲测有效: 效果: Action 类代码: private InputStream inputStream; //(get,set方法省略)定义一个输入流,用于接住在Service类生成的含有EXCEL的输入流 public String exportNetworkDeviceList() throws Exception {    setInputStrea

poi导出excel设置样式

由于要利用poi导出excel(XSSFWorkbook),而且要添加样式,搜索其他的结果无非都是颜色值,经查询的结果,做一下总结: 1.设置背景色,要用  style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); 使用 style.setFillBackgroundColor(bg);方法总是出现一个黑块,所以改为上面的写法,结果正确 颜色的问题,可以在 IndexedColors 中查到,是个枚举 2.有合并单元格的情况下,

Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

POI导出EXCEL经典实现

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

POI导出EXCEL经典实现(转)

http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 POI 的功能. 2.POI结构 HSSF - 提供读写Microsoft Excel XLS格式档案的功能.XS

java中使用poi导出excel表格数据并且可以手动修改导出路径

在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下 jar包下载路径:http://download.csdn.net/download/pumpkin09/7077011 第二步:添加poi导出工具类 1 package com.yjd.admin.util; 2 3 import java.io.IOException; 4 import ja