您的位置:首页 > 编程语言 > Java开发

Java实现通过poi把数据查出来放在模板Excel中并作为附件发送邮件

2017-01-16 16:33 941 查看
Java实现通过poi把数据查出来放在模板中,并作为附件发送邮件。

要点:

1.java代码

2.poi

3.从数据库中查出数据

4.把数据显示到模板(excel)中

5.发送邮件,附件为excel



其中模板存放在项目中,第一次使用poi,话不多说直接上代码。

package com.clbus.matouwang.web.action.ma;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.mail.util.ByteArrayDataSource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereoty
4000
pe.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.clbus.matouwang.common.utils.PageUtil;
import com.clbus.matouwang.pojo.MaterielInquiryOrderDetailExt;
import com.clbus.matouwang.pojo.base.Criteria;
import com.clbus.matouwang.pojo.base.MaterielVendorInfo;
import com.clbus.matouwang.service.MaterielInquiryOrderDetailService;
import com.clbus.matouwang.service.MaterielVendorInfoService;

/**
* 供应链询价单 发送邮件给供应商
* @author Yasha
*
*/
@Controller
public class SendEmailToVendorController {

/**
* 询价单服明细务类
*/
@Autowired
private MaterielInquiryOrderDetailService materielInquiryOrderDetailService;

/**
* 供货商基础信息类
*/
@Autowired
private MaterielVendorInfoService materielVendorInfoService;

/**
*
* 方法名: getAttachment
* 描述: 获取邮件的附件
* 创建人: Yasha
* 创建时间: 2017年1月12日 下午3:17:12
* 版本号: v1.0
* 抛出异常:
* 参数:
* 返回类型: void
*/
@SuppressWarnings("deprecation")
@RequestMapping("/getAttachment")
public void getAttachment(HttpServletRequest request, HttpServletResponse response, String inquiryNo, String vendorId, String tempContent){

// 未填写邮箱地址的供货商列表
List<String> vendorsList = new ArrayList<String>();

// 设置查询条件
Criteria example = new Criteria();
if(vendorId != null && vendorId != "" && inquiryNo != null && inquiryNo != ""){
/***********************遍历供货商,给每一个供货商发送一封邮件,附件内容为当前询单中此供货商提供的所有物料详情**************************/
String[] vendorIds = vendorId.split(",");
for(int i=0;i<vendorIds.length;i++){
// 查询条件
example.put("vendorId", vendorIds[i]);
example.put("inquiryNo", inquiryNo);
// 根据询单id查询询单信息
List<MaterielInquiryOrderDetailExt> vendorInfoList = materielInquiryOrderDetailService.getMaterielInfoListByInquiryNo(example);

try {
// 获取模板
String path = request.getRealPath("WEB-INF/excel/询价单询价信息模板.xls");
FileInputStream template = new FileInputStream(path);
// 如果是xlsx,2007,用XSSF,如果是xls,2003,用HSSF
// 一个Excel文件的层次:Excel文件-> 工作表-> 行-> 单元格 对应到POI中,为:workbook-> sheet-> row-> cell
HSSFWorkbook workBook=new HSSFWorkbook(template);
// 获取第一个sheet页
HSSFSheet sheet=workBook.getSheetAt(0);

/******************************设置表头*****************************/
String sheetTitle = "供应链询价单询价信息("+ inquiryNo +")";
// 单元格合并
// 四个参数分别是:起始行,起始列,结束行,结束列
sheet.addMergedRegion(new CellRangeAddress(0,0,2,10));
// 创建表头并赋值
HSSFRow rowTitle = sheet.createRow(0);
HSSFCell cellTitle = rowTitle.createCell(0);
cellTitle.setCellValue(sheetTitle);

// 创建剧中样式
HSSFCellStyle cellStyle = workBook.createCellStyle();
// 垂直居中
cellStyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 水平居中
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 创建字体
HSSFFont cellFont = workBook.createFont();
cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
cellFont.setFontHeight((short) 300);
cellStyle.setFont(cellFont);
cellTitle.setCellStyle(cellStyle);

/**********************遍历物料,并将物料列表显示到模板中,作为邮件的附件***********************/
// 行号下标,从0开始
int rowIndex = 3 ;
for(int j=0;j<vendorInfoList.size();j++){
rowIndex++;
// 创建行
HSSFRow row=sheet.createRow(rowIndex);
// 根据下标创建单元格
// 设置物料序号
row.createCell(0).setCellValue(j+1);
// 设置IMPA编码
if(null != vendorInfoList.get(j).getMaterielCodeImpa()){
row.createCell(1).setCellValue(vendorInfoList.get(j).getMaterielCodeImpa());
}else {
row.createCell(1).setCellValue("");
}

// 设置物料中文名称
if(null != vendorInfoList.get(j).getMaterielName()){
row.createCell(2).setCellValue(vendorInfoList.get(j).getMaterielName());
}else {
row.createCell(2).setCellValue("");
}

// 设置物料英文名称
if(null != vendorInfoList.get(j).getMaterielNameEn()){
row.createCell(3).setCellValue(vendorInfoList.get(j).getMaterielNameEn());
}else {
row.createCell(3).setCellValue("");
}

// 设置物料规格
if(null != vendorInfoList.get(j).getMaterielSpecification()){
row.createCell(4).setCellValue(vendorInfoList.get(j).getMaterielSpecification());
}else {
row.createCell(4).setCellValue("");
}

// 设置物料数量
if(null != vendorInfoList.get(j).getQuantity()){
row.createCell(5).setCellValue(vendorInfoList.get(j).getQuantity().toString());
}else {
row.createCell(5).setCellValue("");
}

// 设置物料单位
if(null != vendorInfoList.get(j).getUnit()){
row.createCell(6).setCellValue(vendorInfoList.get(j).getUnit());
}else {
row.createCell(6).setCellValue("");
}

// 设置物料供应商
if(null != vendorInfoList.get(j).getVendorName()){
row.createCell(7).setCellValue(vendorInfoList.get(j).getVendorName());
}else {
row.createCell(7).setCellValue("");
}

// 设置物料采购成本
if(null != vendorInfoList.get(j).getLowPrice()){
row.createCell(8).setCellValue(vendorInfoList.get(j).getLowPrice().toString());
}else {
row.createCell(8).setCellValue("");
}

// 设置采购币种
if(null != vendorInfoList.get(j).getCurrency()){
row.createCell(9).setCellValue(vendorInfoList.get(j).getCurrency());
}else {
row.createCell(9).setCellValue("");
}

// 设置采购税项
if(null != vendorInfoList.get(j).getTaxation()){
row.createCell(10).setCellValue(vendorInfoList.get(j).getTaxation());
}else {
row.createCell(10).setCellValue("");
}

// 设置物料详情主键
if(null != vendorInfoList.get(j).getPkId()){
row.createCell(11).setCellValue(vendorInfoList.get(j).getPkId());
}else {
row.createCell(11).setCellValue("");
}
}
/***********************准备邮件并发送给供货商**********************/
//                    workBook.write(out);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workBook.write(baos);
baos.flush();
byte[] bt = baos.toByteArray();
InputStream is = new ByteArrayInputStream(bt, 0, bt.length);
baos.close();

// 查询供货商邮箱地址
MaterielVendorInfo vendorInfo = materielVendorInfoService.selectByPrimaryKey(vendorIds[i]);
// 获取邮件内容
// 查询条件
example.clear();
example.put("tGroup", "email");
example.put("tType", "mtw_email_inquiry");
// 获取模板内容
//                    String tempContent = materielInquiryOrderDetailService.getMailTemplate(example);
String email = vendorInfo.getVendorMail();
if(!"".equalsIgnoreCase(email)){
sendMail("物料详情", email, tempContent , is);
}else {
// 供货商姓名
vendorsList.add(vendorInfo.getVendorName());
// 不发送邮件
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
PageUtil.print(vendorsList.toString(), response);
}

/**
*
* 方法名: sendMail
* 描述: 发送邮件
* 创建人: Yasha
* 创建时间: 2017年1月12日 下午7:19:06
* 版本号: v1.0
* 抛出异常:
* 参数: @param subject
* 参数: @param toMail
* 参数: @param content
* 参数: @param files
* 参数: @return
* 返回类型: boolean
*/
public static boolean sendMail(String subject, String toMail, String content, InputStream is) {
boolean isFlag = false;
try {
String smtpFromMail = "xxxxxx.com";  //账号
String pwd = "xxxxxx"; //密码
int port = 25; //端口
String host = "smtp.exmail.qq.com"; //端口

Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
session.setDebug(false);

MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(smtpFromMail, "物料询价单"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toMail));
message.setSubject(subject);
message.addHeader("charset", "UTF-8");

/*添加正文内容*/
Multipart multipart = new MimeMultipart();
BodyPart contentPart = new MimeBodyPart();
contentPart.setText(content);

contentPart.setHeader("Content-Type", "text/html; charset=UTF-8");
multipart.addBodyPart(contentPart);

/*添加附件*/
MimeBodyPart fileBody = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(is, "application/msexcel");
fileBody.setDataHandler(new DataHandler(source));
String fileName  = "物料列表.xls";
// 中文乱码问题
fileBody.setFileName(MimeUtility.encodeText(fileName));
multipart.addBodyPart(fileBody);

message.setContent(multipart);
message.setSentDate(new Date());
message.saveChanges();
Transport transport = session.getTransport("smtp");

transport.connect(host, port, smtpFromMail, pwd);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
isFlag = true;
} catch (Exception e) {
e.printStackTrace();
isFlag = false;
}
} catch (Exception e) {
e.printStackTrace();
}
return isFlag;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: