生成excel流文件,并发送邮件附件

该代码示例展示了如何在Java中利用jexcelapi库创建Excel工作簿,设置样式,填充数据,并通过JavaMailSender发送带有Excel附件的邮件。方法包括创建工作表,定义单元格样式,设置行高和列宽,以及构建表头和数据。
摘要由CSDN通过智能技术生成
<dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.12</version>
    <scope>compile</scope>
</dependency>
//生成excel
   public static ByteArrayInputStream createExcel(List<AlarmContentEmailVo> emailVoList) {
      try {
         // 1、创建一个流文件
         ByteArrayOutputStream excel = new ByteArrayOutputStream();
         //创建一个excel
         WritableWorkbook workbook = Workbook.createWorkbook(excel);
         //  2、创建一个Excel的工作表sheet
         WritableSheet sheet = workbook.createSheet("预警内容", 0);
         //  3、样式设置
         WritableFont bold = new WritableFont(WritableFont.createFont("宋体"), 12, WritableFont.BOLD);
         WritableFont noBold = new WritableFont(WritableFont.createFont("宋体"), 12, WritableFont.NO_BOLD);
         WritableCellFormat titleFormate = new WritableCellFormat(bold);
         // 设置单元格中的内容水平方向居中、垂直方向居中设置边框
         titleFormate.setAlignment(jxl.format.Alignment.CENTRE);
         titleFormate.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
         titleFormate.setBorder(Border.ALL, BorderLineStyle.THIN);
         // 设置正文内容样式,单元格样式控制对象
         WritableCellFormat textFormat = new WritableCellFormat(noBold);
         //  单元格中的内容水平方向居中、垂直方向居中、设置边框
         textFormat.setAlignment(jxl.format.Alignment.CENTRE);
         textFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
         textFormat.setBorder(Border.ALL,BorderLineStyle.THIN);
         //  3.4、窗口冻结第一行
         sheet.getSettings().setVerticalFreeze(1);
         //sheet.getSettings().setHorizontalFreeze(2);//冻结 2列两行
         //  3.5、设置行高--第一行标题行
         sheet.setRowView(0,500);
//       //  3.6、设置列宽
//       sheet.setColumnView(0,15);
//       sheet.setColumnView(1,25);
//       sheet.setColumnView(2,30);
//       sheet.setColumnView(3,15);
//       sheet.setColumnView(4,15);
//       sheet.setColumnView(5,20);
//       sheet.setColumnView(6,20);
//       sheet.setColumnView(7,20);
         //  4、构造表头
         List<String> titleList = Arrays.asList("运营商", "项目", "企业名称", "预警类别", "预警说明", "预警等级","预警时间","预警状态");
         for (int i = 0; i < titleList.size(); i++) {
            Label label_00 = new Label(i,0, titleList.get(i), titleFormate);
            sheet.addCell(label_00);
         }
         //  5、填充数据
         //开始行数
         int startRow=1;
         //开始列数
         int startcell=0;
         for (int i = 0; i < emailVoList.size(); i++, startRow++) {
            startcell=0;
            AlarmContentEmailVo vo= emailVoList.get(i);
            Label label = new Label(startcell++, startRow, vo.getDeptName(), textFormat);
            sheet.addCell(label);
            Label labe2 = new Label(startcell++, startRow, vo.getProjectName(), textFormat);
            sheet.addCell(labe2);
            Label labe3 = new Label(startcell++, startRow, vo.getCompanyName(), textFormat);
            sheet.addCell(labe3);
            Label labe4 = new Label(startcell++, startRow, vo.getAlarmCategoryName(), textFormat);
            sheet.addCell(labe4);
            Label labe5 = new Label(startcell++, startRow, vo.getAlarmDetail(), textFormat);
            sheet.addCell(labe5);
            Label labe6 = new Label(startcell++, startRow, vo.getAlarmLevelName().toString(), textFormat);
            sheet.addCell(labe6);
            Label labe7 = new Label(startcell++, startRow, vo.getAlarmTime().toString(), textFormat);
            sheet.addCell(labe7);
            Label labe8 = new Label(startcell++, startRow, vo.getStatusName(), textFormat);
            sheet.addCell(labe8);
         }
         workbook.write();
         workbook.close();
         // 将流文件存到字节数组缓冲区
         ByteArrayInputStream excelAttachment = new ByteArrayInputStream(excel.toByteArray());
         return excelAttachment;
      }catch (Exception e){
         throw new ServiceException("创建Excel失败");
      }
   }

发送邮件

    public void sendAlarmMail(String to, String subject, List<AlarmContentEmailVo emailVoList) {

        try {

        //邮件可自行生成,主要看附件

            MimeMessage mailMessage = javaMailSender.createMimeMessage();

            MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8");

            messageHelper.setFrom(fromMail);

            messageHelper.setTo(to);

            messageHelper.setSubject(subject);

            messageHelper.setText(contextText(emailVoList), true);

      // 邮件附件

            ByteArrayDataSource file = new ByteArrayDataSource(createExcel(emailVoList), "application/vnd.ms-excel;charset=UTF-8");

            messageHelper.addAttachment(MimeUtility.encodeWord("预警内容.xls","utf-8","B"),file);

            //      FileSystemResource file = new FileSystemResource(new File("D:\\1.xlsx"));

            //      messageHelper.addAttachment("预警内容.xlsx", file);

            javaMailSender.send(mailMessage);

        } catch (Exception e) {

            throw new ServiceException("发送邮件失败");

        }

    }

在Java中,你可以使用Apache POI库来创建Excel文件,然后将其转换为字节,并作为邮件的附件发送出去。以下是简单的步骤: 1. **添加依赖**: 首先,在你的项目中引入Apache POI(HSSF for旧版本,XSSF for新版本)和JavaMail库。如果你使用Maven,可以在pom.xml文件中添加如下依赖: ```xml <dependencies> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> <!-- 或者最新版本 --> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.6.2</version> <!-- 或者最新版本 --> </dependency> </dependencies> ``` 2. **创建Excel**: 使用`HSSFWorkbook`或`XSSFWorkbook`对象(取决于你需要处理的是老版的xls还是新版xlsx)创建一个新的工作簿,并添加工作表、数据等。 ```java import org.apache.poi.xssf.usermodel.XSSFWorkbook; XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello, World!"); ``` 3. **保存为附件**: 将工作簿转换为字节,然后设置为邮件的附件。 ```java InputStream fileOut = null; try { ByteArrayOutputStream os = new ByteArrayOutputStream(); workbook.write(os); fileOut = new ByteArrayInputStream(os.toByteArray()); } catch (IOException e) { e.printStackTrace(); } MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.attachFile(fileOut, "example.xlsx"); ``` 4. **构造并发送邮件**: 使用JavaMail API创建SMTP会话,设置发件人、收件人、主题以及邮件内容,最后将附件添加到邮件中发送。 ```java import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; // ...省略其他邮件配置 Properties props = System.getProperties(); props.put("mail.smtp.host", "smtp.example.com"); // 你的SMTP服务器地址 Session session = Session.getInstance(props, new Authenticator() {...}); MimeMultipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress("from@example.com")); msg.setRecipient(Message.RecipientType.TO, new InternetAddress("to@example.com")); msg.setSubject("Subject"); msg.setContent(multipart); msg.saveChanges(); Transport.send(msg); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值