Java实现通过poi把数据查出来放在模板Excel中并作为附件发送邮件
2017-01-16 16:33
941 查看
Java实现通过poi把数据查出来放在模板中,并作为附件发送邮件。
要点:
1.java代码
2.poi
3.从数据库中查出数据
4.把数据显示到模板(excel)中
5.发送邮件,附件为excel
其中模板存放在项目中,第一次使用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; } }
相关文章推荐
- java 定时发送邮件以及数据导出excel作为附件
- java操作Excel之POI(5)利用POI实现使用模板批量导出数据
- java操作Excel之POI(6)使用POI实现使用模板批量添加数据
- java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板
- Java通过POI技术操作Excel(3)----数据导出
- Java使用POI实现数据导出excel报表
- Java 通过Poi解析数据到EXCEL
- 一个将数据文件转换成excel文件打印的java实现方法的代码片断(Struts+poi)
- JAVA实现数据库数据导入/导出到Excel(POI)
- java通过POI技术操作Excel(1)----模板导出
- Java—POI实现数据导入Excel提示用户是保存,打开
- poi实现根据excel模板,生成excel并导入数据
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- 终于实现通过java发送Internet邮件了!!!分享一下
- Java使用POI实现数据导出excel报表
- SQL Server 定时发送邮件(从数据库查询出的数据作为附件)
- Java使用POI实现数据导出excel报表
- java实现 邮件抄送,密送,多个附件 发送
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表