Java使用Apache.POI中HSSFWorkbook导出到Excel的实现方法

作者:小辰哥哥 时间:2022-05-24 17:14:13 

使用Apache.POI中HSSFWorkbook导出到Excel,具体内容如下所示:

1.引入Poi依赖(3.12)

依赖如下:


<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.12</version>
</dependency>

2.创建实体类(User.java)


package com.kd.nm.entity.pojo;

/**
* 实体类(User)
*
* author 小辰哥哥
*/
public class User {
// 用户编号
private String userNo;
// 用户名称
private String userName;
// 年龄
private String age;

// 无参构造
public User() {
}

// 有参构造
public User(String userNo, String userName, String age) {
 this.userNo = userNo;
 this.userName = userName;
 this.age = age;
}

// get与set方法进行封装
public String getUserNo() {
 return userNo;
}

public void setUserNo(String userNo) {
 this.userNo = userNo;
}

public String getUserName() {
 return userName;
}

public void setUserName(String userName) {
 this.userName = userName;
}

public String getAge() {
 return age;
}

public void setAge(String age) {
 this.age = age;
}

// 重新toString方法
@Override
public String toString() {
 return "User{" +
   "userNo='" + userNo + '\'' +
   ", userName='" + userName + '\'' +
   ", age='" + age + '\'' +
   '}';
}
}

3.Excel相关工具类(ExcelUtil、ReflectUtil)


package com.kd.nm.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.*;

/**
* Description : Excel相关工具类
*
* @author: 小辰哥哥
*
*/
public class ExcelUtil {

/**
 * 生成excel表格
 * @param heads 表头内容
 * @param data 数据内容
 * @return
 */
public static HSSFWorkbook creatExcel(Map<String, String> heads, List data) {

// 声明一个工作薄
 HSSFWorkbook workbook = new HSSFWorkbook();
 // 生成一个表格
 HSSFSheet sheet = workbook.createSheet();

// 生成标题行样式
 HSSFCellStyle headStyle = creatStyle(workbook, (short) 14);

// 生成表格内容样式
 HSSFCellStyle bodyStyle = creatStyle(workbook, (short) 10);

// 标题元素
 List<String> keys = new ArrayList<String>(heads.keySet());

// 像素单位
 short px = 1000;
 // 设置列宽
 for (int columnIndex = 0; columnIndex < keys.size(); columnIndex++) {

sheet.setColumnWidth(columnIndex, 6 * px);
 }

// 生成表格
 for (int rowNum = 0; rowNum <= data.size(); rowNum++) {

// 创建行
  HSSFRow row = sheet.createRow(rowNum);

for (int cellNum = 0; cellNum < keys.size(); cellNum++) {

// 创建列
   HSSFCell cell = row.createCell(cellNum);

// 标题
   if (rowNum == 0) {

cell.setCellStyle(headStyle);
    cell.setCellValue(heads.get(keys.get(cellNum)));
   } else { // 内容

cell.setCellStyle(bodyStyle);
    // 通过反射获取
    cell.setCellValue(ReflectUtil.getValue(keys.get(cellNum), data.get(rowNum - 1)));
   }
  }
 }

return workbook;
}

/**
 * 生成样式
 * @param workbook
 * @param size
 * @return
 */
public static HSSFCellStyle creatStyle(HSSFWorkbook workbook, short size) {

HSSFCellStyle style = workbook.createCellStyle();
 style.setAlignment((HSSFCellStyle.ALIGN_CENTER));
 style.setVerticalAlignment((HSSFCellStyle.VERTICAL_CENTER));
 HSSFFont font = workbook.createFont();
 font.setFontHeightInPoints(size);
 font.setFontName("微软雅黑");
 style.setFont(font);
 style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
 style.setBorderTop(HSSFCellStyle.BORDER_THIN);
 style.setBorderRight(HSSFCellStyle.BORDER_THIN);
 style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

return style;
}
}

package com.kd.nm.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ReflectionUtils;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

/**
* 反射工具包
*
* @author: 小辰哥哥
*/
public class ReflectUtil {

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

public static String getValue(String key, Object obj) {

String value = "";

try {

// 获取当前属性
  PropertyDescriptor pd = new PropertyDescriptor(key, obj.getClass());
  // 获取get方法
  Method getMd = pd.getReadMethod();
  value = getMd.invoke(obj).toString();
 } catch (Exception e) {

logger.error("获取内容失败!");
  e.printStackTrace();
 }

return value;
}

public static void setValue(String key, String value, Object obj) {

try {

// 获取当前属性
  PropertyDescriptor pd = new PropertyDescriptor(key, obj.getClass());
  // 获取set方法
  Method writeMd = pd.getWriteMethod();
  writeMd.invoke(obj, value);
 } catch (Exception e) {

logger.error("设置内容失败!");
  e.printStackTrace();
 }
}
}

4.后端控制器代码


@RequestMapping(value = "/exportExcel",method = RequestMethod.GET,produces = "application/json")
public void exportExcel(HttpServletResponse httpServletResponse) throws IOException {

// 表头内容(可在前端设置,通过参数传递进来) Key是实体类的属性值,value是表头的lable
 Map<String,String> head = new HashMap<>();
 head.put("userNo","用户编号");
 head.put("userName","用户名称");
 head.put("age","年龄");

// 表格数据内容,模拟数据库查询出来的数据
 List<User> data = new ArrayList<>();
 data.add(new User("1","小辰哥哥","18"));
 data.add(new User("2","小猪妹妹","18"));
 data.add(new User("3","大猪哥哥","18"));

// 生成工作薄
 HSSFWorkbook hssfWorkbook = ExcelUtil.creatExcel(head, data);

// 定义文件名
 String fileName = "导出Excel表格";

httpServletResponse.setHeader("Cache-Control", "max-age=0");
 httpServletResponse.setContentType("application/vnd.ms-excel");
 httpServletResponse.addHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"),
   "ISO-8859-1") + ".xls");

OutputStream outputStream = httpServletResponse.getOutputStream();

hssfWorkbook.write(outputStream);
 outputStream.flush();
 outputStream.close();
}

5.访问映射地址

接口访问:

http://localhost:9090/FaultTreatment/api/standard/exportExcel

Java使用Apache.POI中HSSFWorkbook导出到Excel的实现方法
Java使用Apache.POI中HSSFWorkbook导出到Excel的实现方法

来源:https://blog.csdn.net/weixin_43630831/article/details/115375674

标签:Apache.POI,HSSFWorkbook,Excel
0
投稿

猜你喜欢

  • java Mail邮件接收工具类

    2022-04-24 14:17:17
  • Java8使用stream实现list中对象属性的合并(去重并求和)

    2023-06-23 13:44:40
  • 实例讲解Java中random.nextInt()与Math.random()的基础用法

    2023-11-29 12:29:54
  • SpringMVC @RequestMapping注解详解

    2022-08-08 06:58:14
  • Redis 订阅发布_Jedis实现方法

    2023-11-10 03:38:41
  • Android WebView基础应用详解

    2023-09-30 07:36:46
  • Java Thread.currentThread().getName() 和 this.getName()区别详解

    2021-10-31 01:46:18
  • 关于Mybatis-Plus Update更新策略问题

    2022-04-14 19:29:24
  • Java基础之final关键字作用案例

    2022-11-02 19:23:35
  • Redis6搭建集群并在SpringBoot中使用RedisTemplate的实现

    2023-10-31 14:48:05
  • java图的深度优先遍历实现随机生成迷宫

    2023-06-26 06:06:05
  • JAVA内部类示例详解及练习

    2023-04-05 06:42:39
  • Flutter图片与文件选择器使用实例

    2023-07-17 09:11:12
  • Java实战之在线寄查快递系统的实现

    2023-08-10 21:52:23
  • java高并发ScheduledThreadPoolExecutor与Timer区别

    2023-08-11 03:08:29
  • 一篇文章带你入门Java数据类型

    2022-06-10 09:25:44
  • 保证缓存和数据库的数据一致性详解

    2023-11-18 08:10:44
  • SpringBoot中的Condition包下常用条件依赖注解案例介绍

    2023-05-29 11:42:17
  • Java实现双保险线程的示例代码

    2023-09-21 07:59:46
  • Java C++ 算法题解leetcode1608特殊数组特征值

    2023-05-21 21:09:01
  • asp之家 软件编程 m.aspxhome.com