springBoot整合poi导出excel(二)

今天就再分享一种excel导出的方法
首先是添加依赖

<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi-ooxml</artifactId>
		<version>3.9</version>
	</dependency>

然后是控制层

import com.example.springboot08.com.util.ExcelUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * @Author: Administrator
 * @Description:
 * @Date: 2019-08-25 18:14
 * @Modified By: excel导出
 */
@Controller
@RequestMapping("/ExportController")
public class ExportController {

    private static final Logger logger = LoggerFactory.getLogger(ExportController.class);

    private static final String dateFormat = "yyyy-MM-dd-HH-mm";

    @RequestMapping("/excel")
    @ResponseBody
    public void excel(HttpServletRequest request, HttpSession session, HttpServletResponse response){
        //HashMap paramMap= ControllerUtil.getParamMap(request);
        List<HashMap<String,String>> resultMap=new ArrayList<HashMap<String,String>>();
        HashMap<String,String> map1=new HashMap<String,String>();
        HashMap<String,String> map2=new HashMap<String,String>();
        HashMap<String,String> map3=new HashMap<String,String>();
        map1.put("name","张三");
        map1.put("age","23");
        map1.put("sex","男");
        map1.put("profession","java");
        map1.put("WorkingLife","3");
        map1.put("Rank","java中级开发工程师");

        map2.put("name","李四");
        map2.put("age","35");
        map2.put("sex","男");
        map2.put("profession","架构师");
        map2.put("WorkingLife","10");
        map2.put("Rank","高级架构师");

        map3.put("name","李梅");
        map3.put("age","25");
        map3.put("sex","女");
        map3.put("profession","H5工程师");
        map3.put("WorkingLife","5");
        map3.put("Rank","中级H5工程师");
        resultMap.add(map1);
        resultMap.add(map2);
        resultMap.add(map3);

        //调用导出方法
        exprotExcel(resultMap,response);

    }

    public void exprotExcel(List<HashMap<String, String>> resultMap,
                            HttpServletResponse response){
        //excel标题
        String[] title={"姓名","年龄","性别","职位","工作年限","职级"};
        //excel文件名称
        Date nowTime=new Date();
        SimpleDateFormat time=new SimpleDateFormat(dateFormat);
        String excelName = "员工信息"+time.format(nowTime)+".xls";
        //sheet名
        String sheetName = "职员信息";
        String[][] content = new String[resultMap.size()][title.length];
        for (int i = 0; i <= resultMap.size()-1; i++) {
            HashMap<String, String> map = resultMap.get(i);
            content[i]=new String[title.length];
            content[i][0]=map.get("name");
            content[i][1]=map.get("age");
            content[i][2]=map.get("sex");
            content[i][3]=map.get("profession");
            content[i][4]=map.get("WorkingLife");
            content[i][5]=map.get("Rank");
        }
        //创建HSSFWorkbook文档
        HSSFWorkbook workbook = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null);
        //响应信息到客户端
        try {
            this.setResponseHeader(response,excelName);
            OutputStream os=response.getOutputStream();
            workbook.write(os);
            os.flush();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    //发送响应流方法
    public void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            try {
                fileName = new String(fileName.getBytes(),"ISO8859-1");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                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) {
            ex.printStackTrace();
        }
    }

}

然后是工具方法 (重点)

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * @Author: Administrator
 * @Description:
 * @Date: 2019-08-25 18:26
 * @Modified By: excel导出工具类
 */
public class ExcelUtil {

    /**
     * 导出Excel
     * @param sheetName sheet名称
     * @param title 标题
     * @param values 内容
     * @param wb HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName, String []title, String [][]values, HSSFWorkbook wb){

        // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
        if(wb == null){
            wb = new HSSFWorkbook();
        }

        // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);

        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
        HSSFRow row = sheet.createRow(0);

        // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式

        //声明列对象
        HSSFCell cell = null;

        //创建标题
        for(int i=0;i<title.length;i++){
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style);
        }

        //创建内容
        for(int i=0;i<values.length;i++){
            row = sheet.createRow(i + 1);
            for(int j=0;j<values[i].length;j++){
                //将内容按顺序赋给对应的列对象
                row.createCell(j).setCellValue(values[i][j]);
            }
        }
        return wb;
    }

}

一个拼接前台参数的工具类(可有可无)

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Author: Administrator
 * @Description:
 * @Date: 2019-08-25 18:17
 * @Modified By: 拼接从前台接收的参数
 */
public class ControllerUtil {


    /**
     * 拼装列表返回结果
     * @param total
     * @param page
     * @param pagesize
     * @param jsonResult
     * @return
     */
    public static Map getReturnMap(int total,String page,String pagesize,String jsonResult){
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("total", String.valueOf(total));
        map.put("page", String.valueOf(Integer.parseInt(page)*Integer.parseInt(pagesize)));
        map.put("pagesize", pagesize);
        map.put("rows", JSONArray.fromObject(jsonResult));
        return map;
    }

    public static Map<String, Object> getReturnMapWithFooter(String jsonResult){
        Map<String, Object> map = new ConcurrentHashMap<String, Object>();
        map.put("rows", JSONArray.fromObject(jsonResult));
        return map;
    }

    /**
     * 拼接查询参数
     * @param request
     * @return
     */
    public static HashMap getParamMap(HttpServletRequest request){
        HashMap<String, String> paramMap = new HashMap<String, String>();
        Enumeration<String> pNames=request.getParameterNames();
        while(pNames.hasMoreElements()){
            String name = (String)pNames.nextElement();
            String value = request.getParameter(name);
            if(name.equals("page")){
                value = String.valueOf(Integer.parseInt(value)*10);
            }
            paramMap.put(name, value);
        }
        return paramMap;
    }
    /**
     * 拼接查询参数
     * @param request
     * @return
     */
    public static HashMap getParamsMap(HttpServletRequest request){
        HashMap<String, String> paramMap = new HashMap<String, String>();
        String pageSize = request.getParameter("pagesize");
        Enumeration<String> pNames=request.getParameterNames();
        while(pNames.hasMoreElements()){
            String name = (String)pNames.nextElement();
            String value = request.getParameter(name);
            if(name.equals("page")){
                value = String.valueOf(Integer.parseInt(value)*Integer.parseInt(pageSize));
            }
            paramMap.put(name, value);
        }
        return paramMap;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot整合POI可以实现Excel文件的导出。具体步骤如下: 1. 添加POI依赖 在pom.xml文件中添加POI的依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建Excel文件 使用POI创建Excel文件,可以使用HSSFWorkbook或XSSFWorkbook类。HSSFWorkbook适用于xls格式的Excel文件,XSSFWorkbook适用于xlsx格式的Excel文件。 ``` // 创建HSSFWorkbook对象 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建sheet HSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建行 HSSFRow row = sheet.createRow(); // 创建单元格 HSSFCell cell = row.createCell(); // 设置单元格的值 cell.setCellValue("Hello World"); ``` 3. 导出Excel文件 使用HttpServletResponse将Excel文件输出到浏览器。 ``` // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=test.xls"); // 输出Excel文件 workbook.write(response.getOutputStream()); ``` 完整的代码示例: ``` @GetMapping("/export") public void export(HttpServletResponse response) throws IOException { // 创建HSSFWorkbook对象 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建sheet HSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建行 HSSFRow row = sheet.createRow(); // 创建单元格 HSSFCell cell = row.createCell(); // 设置单元格的值 cell.setCellValue("Hello World"); // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=test.xls"); // 输出Excel文件 workbook.write(response.getOutputStream()); } ``` ### 回答2: Spring Boot是Spring框架的一个轻量级解决方案。它的特点是简单易用、快速开发、集成度高。POI是Apache软件基金会的一个开源项目,用于支持在Java平台上处理Microsoft Office文件格式。Spring Boot和POI的结合,使得在开发导出Excel文件的功能时,能够更加方便快捷,大幅降低开发难度。 整合POI导出Excel的过程中,在pom.xml文件中添加POI的依赖,然后创建一个ExcelUtil工具类。这个ExcelUtil工具类主要包含以下功能: 1. 创建工作簿(Workbook)对象 2. 创建工作表(Sheet)对象 3. 创建行(Row)对象 4. 创建单元格(Cell)对象 5. 对单元格进行赋值 6. 设置格式 其次,在需要导出Excel文件的Controller中,创建相应的方法。这个方法主要包含以下步骤: 1. 获得数据 2. 调用ExcelUtil工具类,创建工作簿对象 3. 调用ExcelUtil工具类,创建工作表对象 4. 循环遍历数据,创建行和单元格对象,并对单元格进行赋值 5. 调用ExcelUtil工具类,将工作簿写入输出流中 6. 设置响应头,告知浏览器当前响应的文件类型 7. 将响应输出流写到浏览器中 最后,访问这个Controller的对应地址即可下载导出Excel文件。 总体来说,springboot整合poi导出excel的过程比较简单,只需要按照上述步骤完成即可。这种方式不仅可以用于导出简单的Excel文件,还适用于更复杂的数据格式,提高了开发效率,方便了数据的导出和共享。 ### 回答3: 近年来,随着企业信息化建设的日益推进,导出Excel文件已经成为了不少企业常用的统计工具之一。而Spring Boot是一个非常流行的开发框架,它本身提供了很多优秀的功能和工具,如何在Spring Boot框架中集成Poi组件,实现Excel导出功能,是一个非常值得探讨的话题。 Poi是Apache软件基金会的开源项目,可以用于处理各种Office文档格式,包括Word、Excel和PowerPoint等。它提供了很多接口和实现类,可以方便地完成Excel文件的读写操作。下面我们就来看一下Spring Boot如何整合Poi实现Excel导出的功能。 1. 添加Poi依赖 首先,在项目的pom.xml文件中,添加Poi的依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> ``` 这里使用的是Poi的3.17版本,也可以根据自己的需要选择其他版本。 2. 创建导出Excel的工具类 在Spring Boot项目中,可以创建一个导出Excel的工具类,用于完成Excel文件的生成和导出。下面给出一个简单的示例: ``` public class ExcelUtil { /** * 导出Excel文件 * @param dataList 导出数据列表 * @param headers Excel表头 * @param fileName 导出文件名 * @param response 响应对象 */ public static void export(List<Map<String, Object>> dataList, String[] headers, String fileName, HttpServletResponse response) throws Exception { // 创建Excel工作簿 Workbook workbook = new XSSFWorkbook(); // 创建Excel表格 Sheet sheet = workbook.createSheet(); // 创建表头行并写入数据 Row headerRow = sheet.createRow(0); for(int i = 0; i < headers.length; i++) { headerRow.createCell(i).setCellValue(headers[i]); } // 写入数据行 int currentRow = 1; for(Map<String, Object> data : dataList) { Row row = sheet.createRow(currentRow++); for(int i = 0; i < headers.length; i++) { Object value = data.get(headers[i]); if(value != null) { if(value instanceof Date) { row.createCell(i).setCellValue((Date)value); } else { row.createCell(i).setCellValue(value.toString()); } } else { row.createCell(i).setCellValue(""); } } } // 设置响应头信息 response.setContentType("application/octet-stream;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 将Excel文件写入响应输出流中 OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); } } ``` 这里使用了Poi中的XSSFWorkbook和Sheet等类,实现了Excel文件的创建和写入操作。同时,还通过HttpServletResponse对象向浏览器发送了响应头信息和Excel文件数据。 3. 调用导出Excel的方法 在Spring Boot项目中,只需要在Controller中调用ExcelUtil的export方法,即可实现Excel导出功能。下面给出一个简单的示例: ``` @RestController public class ExcelController { /** * 导出Excel文件 * @param response 响应对象 */ @GetMapping("/excel") public void exportExcel(HttpServletResponse response) throws Exception { List<Map<String, Object>> dataList = new ArrayList<>(); Map<String, Object> data1 = new HashMap<>(); data1.put("id", 1); data1.put("name", "张三"); data1.put("gender", "男"); data1.put("birthday", new Date()); dataList.add(data1); Map<String, Object> data2 = new HashMap<>(); data2.put("id", 2); data2.put("name", "李四"); data2.put("gender", "女"); data2.put("birthday", new Date()); dataList.add(data2); String[] headers = {"id", "name", "gender", "birthday"}; ExcelUtil.export(dataList, headers, "data.xlsx", response); } } ``` 这里在Controller中创建了一个Excel文件导出的请求处理方法,在方法中调用了ExcelUtil的export方法,传入数据列表、表头和文件名等参数。 总结 通过以上步骤的操作,我们就可以在Spring Boot项目中集成Poi组件,实现Excel文件的导出功能了。当然,在实际应用中,还可能需要对Excel样式、单元格格式等进行调整,使得导出Excel文件更符合自己的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值