当前,我的项目使用Controller类,并利用AbstractJExcelView类生成Excel报告,该报告向用户提示打开或保存excel文件。 Basicall它使用http协议来调用控制器。现在,我需要做的是在(春季)批处理作业期间生成相同的excel文件,并将其作为附件直接通过电子邮件发送。我们正在使用org.springframework.mail.MailSender发送邮件。我不应该使用任何其他外部API,也不知道从哪里开始。
这是我们正在执行的类似代码:-
Controller
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请求。
提前感谢!
Spring Batch中有一个MimeMessageItemWriter,您应该可以使用它发送电子邮件。您需要创建一个创建MimeMessage的ItemProcessor。您可以创建Excel文件并将其作为附件添加到该ItemProcessor中,或者一步一步生成所有需要发送的Excel文件,然后在下一步中进行发送。我的书中有一个从Spring Batch发送电子邮件的示例:Pro Spring Batch
我做了以下工作,达到了目的:-
private ByteArrayOutputStream outputStream;
outputStream = new ByteArrayOutputStream();
WritableWorkbook workbook = Workbook.createWorkbook(outputStream);
.
.
.
.
workbook.write();
workbook.close();
现在是获取值的吸气剂:-
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);
感谢您的帮助!
您能否分享对您有用的代码。我有一个相同的要求,我必须创建一个Excel工作表并将其邮寄。在这里,变量“文件”是什么意思。还有为什么您需要getter函数以及在哪里使用它?