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

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.stereotype.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 vendorsList = new ArrayList();
        
        // 设置查询条件
        Criteria example = new Criteria();
        if(vendorId != null && vendorId != "" && inquiryNo != null && inquiryNo != ""){
            /***********************遍历供货商,给每一个供货商发送一封邮件,附件内容为当前询单中此供货商提供的所有物料详情**************************/
            String[] vendorIds = vendorId.split(",");
            for(int i=0;i 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


你可能感兴趣的:(发送邮件,poi,java)