目前我的项目使用Controller类并利用AbstractJExcelView类生成Excel报告,该报告提示用户打开或保存excel文件。 Basicall它使用http协议来调用控制器。 现在我需要做的是在(Spring)批处理作业期间生成相同的excel文件,并通过电子邮件直接将其作为附件发送。我们正在使用org.springframework.mail.MailSender发送邮件。 我不应该使用任何其他外部API,我不知道从哪里开始。
这是我们正在做的类似代码: -
控制器
public class RevenueReportController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String output =
ServletRequestUtils.getStringParameter(request, "output");
//dummy data
Map<String,String> revenueData = new HashMap<String,String>();
revenueData.put("Jan-2010", "$100,000,000");
revenueData.put("Feb-2010", "$110,000,000");
revenueData.put("Mar-2010", "$130,000,000");
revenueData.put("Apr-2010", "$140,000,000");
revenueData.put("May-2010", "$200,000,000");
if(output ==null || "".equals(output)){
//return normal view
return new ModelAndView("RevenueSummary","revenueData",revenueData);
}else if("EXCEL".equals(output.toUpperCase())){
//return excel view
return new ModelAndView("ExcelRevenueSummary","revenueData",revenueData);
}else{
//return normal view
return new ModelAndView("RevenueSummary","revenueData",revenueData);
}
}
查看
public class ExcelRevenueReportView extends AbstractJExcelView{
@Override
protected void buildExcelDocument(Map model, WritableWorkbook workbook,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Map<String,String> revenueData = (Map<String,String>) model.get("revenueData");
WritableSheet sheet = workbook.createSheet("Revenue Report", 0);
sheet.addCell(new Label(0, 0, "Month"));
sheet.addCell(new Label(1, 0, "Revenue"));
int rowNum = 1;
for (Map.Entry<String, String> entry : revenueData.entrySet()) {
//create the row data
sheet.addCell(new Label(0, rowNum, entry.getKey()));
sheet.addCell(new Label(1, rowNum, entry.getValue()));
rowNum++;
}
}
}
有没有办法做到这一点?我需要生成带有传递和失败的作业数据的Excel工作表。我可以处理填充和创建文件,但我不知道如何在缓冲区中生成excel,或者可能在某个临时目录中,可以在发送邮件时再次附加。用户无需响应任何提示。我们也不会使用任何http请求。
提前致谢!
答案 0 :(得分:1)
Spring Batch中有一个MimeMessageItemWriter可以用来发送电子邮件。您需要创建一个创建MimeMessage的ItemProcessor。您可以创建Excel文件并将其添加为该ItemProcessor中的附件,也可以生成一个步骤来生成需要发送的所有Excel文件,然后在下一步中,您可以发送它们。我有一个在我的书中发送来自Spring Batch的电子邮件的示例:Pro Spring Batch
答案 1 :(得分:1)
我做了以下工作,并达到了目的: -
private ByteArrayOutputStream outputStream;
outputStream = new ByteArrayOutputStream();
WritableWorkbook workbook = Workbook.createWorkbook(outputStream);
.
.
.
.
workbook.write();
workbook.close();
现在,获取值的getter: -
public ByteArrayOutputStream getOutputStream()
{
return this.outputStream;
}
最后,对于电子邮件附件: -
JavaMailSenderImpl sender = new JavaMailSenderImpl();
MimeMessage message = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(destiny);
helper.setSubject(subject);
helper.setText(msg);
helper.setFrom(from);
.
.
.
FileSystemResource fsr = new FileSystemResource(file);
helper.addAttachment("Sample.xls", fsr);
感谢帮助人员!