数据转EXCEL后直接用流的形式发送邮件的方式(文件不落地)(完成java转excel的Util类)

本文介绍如何在Java中通过Apache POI库,将数据库查询结果实时转换为Excel文件,并直接以流形式发送邮件,避免文件在服务器上落地。详细展示了数据转Excel工具类的实现过程,参考了相关博客文章。
摘要由CSDN通过智能技术生成

领导最近交给一个任务,要求定时任务,发送邮件。

具体要求为,要求指定数据库库中查出指定数据,并且放到Excel表格中,最后发送到指定邮箱,但是要求文件不落地。
java中能把数据从流转为excel文件的由两种包,一种是apache开发的poi另一种是net.sourceforge.jexcelapi,听说是一个韩国人开发的包。
我尽量两种包都写到。在公司要求中我使用的是poi。我先用poi实现了这个转换。其中没有设置表格的样式内容。
poi设置Excel单元格样式:https://www.cnblogs.com/linkstar/p/5910916.html
具体代码借鉴了这个老哥的思路:https://blog.csdn.net/yixin605691235/article/details/82429156
具体实现如下(poi实现):
数据转Excel工具类:

package com.www.kx;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

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

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class Data2Excel {
   

	/**
	 * 对象转Excel文件
	 * 
	 * @param list
	 *            传入的数据
	 *            			对应的
	 * @param sheetSize
	 *            工作表的大小
	 * @param request
	 *            网页传来的请求
	 * @param response
	 *            网页传来的相应
	 * @param fileName
	 *            文件名
	 * @param sheetName
	 *            工作表名字
	 * @param title
	 *            表头  
	 *            key-为英文表头 表要javabean对应所以要遵循如下规则
	 *            	根据带路径或不带路径的属性名获取属性值,即接受简单属性名,如userName等,又接受带路径的属性名,如student.department.name等
	 *            value-对应中文在excel中产生的表头名
	 */
	public static void list2ExcelFile(List<T> list, int sheetSize, HttpServletRequest request,
			HttpServletResponse response, String fileName, String sheetName, LinkedHashMap<String, String> title) {
   
		OutputStream outputStream = null;
		// 首先判断list里面是不是有值
		if (list == null || list.size() == 0) {
   
			// 如果空或者大小为0就直接return 或者抛出异常
			return;
			// throw new Exception("传入的数据为空或者大小为零");
		}
		try {
   
			// 前台页面显示下载
			setResp(request, response, fileName);
			outputStream = response.getOutputStream();
			Workbook wb = new HSSFWorkbook();
			Sheet sheet = wb.createSheet(sheetName);
			fillVeticalSheet(sheet, list, title);
			wb.write(outputStream);
			if (wb != null) {
   
				wb.close();
			}
		} catch (Exception e) {
   
			// TODO: handle exception
		} finally {
   
			if (outputStream != null) {
   
				try {
   
					outputStream.close();
				} catch (IOException e) {
   
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 对象转流
	 * 
	 * @param list
	 *            传入的数据
	 * @param sheetSize
	 *            工作表的大小
	 * @param request
	 *            网页传来的请求
	 * @param response
	 *            网页传来的相应
	 * @param fileName
	 *            文件名
	 * @param sheetName
	 *            工作表名字
	 * @param title
	 *            表头  
	 *            key-为英文表头 表要javabean对应所以要遵循如下规则
	 *            	根据带路径或不带路径的属性名获取属性值,即接受简单属性名,如userName等,又接受带路径的属性名,如student.department.name等
	 *            value-对应中文在excel中产生的表头名
	 * @return ByteArrayInputStream 字节流对象
	 * @throws Exception
	 *             传入数据为空
	 */
	public static ByteArrayInputStream list2EcelStream(List
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值