文档章节

Java的Excel导出工具类

Kxvz
 Kxvz
发布于 2018/06/19 18:48
字数 362
阅读 66
收藏 0

首先在POM中引入需要的Jar 

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.47</version>
</dependency>
<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>

工具类:

import com.alibaba.fastjson.JSON;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Excel<T> {

    private XSSFWorkbook workBook = null;
    private XSSFSheet sheet = null;

    public Excel(String sheetName, String... headers) {
        workBook = new XSSFWorkbook();
        sheet = workBook.createSheet(sheetName);

        XSSFRow titleRow = sheet.createRow((short) 0);
        int index = 0;
        for (String header : headers) {
            XSSFCell cell = titleRow.createCell((short) index);
            cell.setCellValue(header);
            index++;
        }
    }

    public Excel(String sheetName) {
        workBook = new XSSFWorkbook();
        sheet = workBook.createSheet(sheetName);
    }

    private Map<String, Field> extract(T obj) {
        List<Field> declaredFields = Arrays.asList(obj.getClass().getDeclaredFields());
        return declaredFields.stream().collect(Collectors.toMap(Field::getName, Function.identity()));
    }

    public void export(OutputStream out) {
        try {
            workBook.write(out);
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                out.flush();
                out.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    public void setDatas(Collection<T> dataset, String... fieldNames) {
        if (dataset == null || fieldNames == null) {
            return;
        }

        Iterator<T> it = dataset.iterator();
        int y = 0;
        while (it.hasNext()) {
            y++;
            XSSFRow row = sheet.createRow(y);
            T t = (T) it.next();
            Map<String, Field> fieldMap = this.extract(t);
            int x = -1;
            for (String fieldName : fieldNames) {
                Field field = fieldMap.get(fieldName);
                if (field == null) {
                    continue;
                }
                x++;
                try {
                    field.setAccessible(true);
                    String value;
                    Object obj = field.get(t);
                    if (obj instanceof Date) {
                        value = DateUtil.format((Date) obj, "yyyy-MM-dd HH:mm:ss");
                    } else if (obj instanceof String) {
                        value = String.valueOf(obj);
                    } else {
                        value = JSON.toJSONString(obj);
                    }
                    XSSFCell cell = row.createCell((short) x);
                    cell.setCellValue(value);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
}

在网页上导出:

@RequestMapping(value = "/api/export", method = RequestMethod.GET)
public void export(HttpServletRequest request, HttpServletResponse response) {
	try {
		List<TmpData> tmps = findTempDate();

		String name = DateUtil.current("yyyyMMddHHmmsss");
		response.setContentType("octets/stream");
		response.addHeader("Content-Disposition", "attachment;filename = " + name + ".xlsx");

		Excel<TmpData> export = new Excel<>("查询导出", "账号", "密码", "IP");
		export.setDatas(tmps, "account", "password", "ip");
		export.export(response.getOutputStream());
	} catch (IOException ex) {
		
	}
}

这样就可以了,至于设置样式之类的,各位自行百度吧...

© 著作权归作者所有

Kxvz
粉丝 12
博文 106
码字总数 29791
作品 0
成都
程序员
私信 提问
Java对象和Excel转换工具XXL-EXCEL

《Java对象和Excel转换工具XXL-EXCEL》 ![donate](http://

许雪里
2017/09/13
0
0
Java Apache POI 操作 Excel 导出

版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82655653 Java Apache POI 操作 Excel 导出 Java 可以通过 Apache POI......

asing1elife
2018/09/12
0
0
精简的 Excel 导入导出工具 - java-excel-utils

是JAVA操作 Excel 导入导出的工具类,目的是简化逻辑操作、可拓展 Excel 导入导出配置。 使用场景: 数据导出Excel表格是系统经常基本的功能之一,而导出Excel数据又是多种多样,如:多表格数...

czydub
2018/12/07
0
0
XXL-EXCEL v1.1.1 发布,Java 对象和 Excel 转换工具

v1.1.1 新特性 1、支持设置Field水平位置,如居中、居左; 2、底层API优化,预约多Sheet操作支持; 3、空Cell导入抛错问题修复; 4、Cell数据类型识别优化,全类型支持; 5、导入时支持空Exc...

许雪里
2018/10/24
1K
9
Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式。不仅仅简单的读取office中的数据.尤其是在生产管理...

长平狐
2012/11/12
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

一文让你轻松了解JAVA开发中的四种加密方法

文章目录 一、工具类 md5加密工具类 base64加密工具类 Bcrypt工具类 二、加密测试 MD5加密测试 base64加密测试 SHA加密测试 BCrypt加密测试 一、工具类 1. md5加密工具类 package 加密Teste...

爱编程的浪子
22分钟前
4
0
注解Annotation实现原理与自定义注解例子

什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metad...

Java面经
23分钟前
5
0
并发模式与 RPS 模式之争,性能压测领域的星球大战

本文是《如何做好性能压测》系列专题分享的第四期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能...

阿里云云栖社区
31分钟前
1
0
Knative Service 之流量灰度和版本管理

本篇主要介绍 Knative Serving 的流量灰度,通过一个 rest-api 的例子演示如何创建不同的 Revision、如何在不同的 Revision 之间按照流量比例灰度。 部署 rest-api v1 代码 测试之前我们需要...

阿里云官方博客
33分钟前
4
0
金融壹账通与菲律宾联合银行合作 共推科技平台赋能中小企业融资

中小微企业融资是世界性的难题,在破解这一难题上,中国平安集团一直在用科技手段贡献来自中国的解决方案,而区块链技术的引入更为这一问题的解决带来了新的方向,同时平安对外赋能的脚步也借...

IFTNews
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部