2014-01-29 25 views
0

當前,我的項目使用Controller類並利用AbstractJExcelView類生成Excel報告,該報告向用戶提供打開或保存Excel文件的提示。 Basicall它使用http協議來調用控制器。 現在我需要做的是在(Spring)批處理作業中生成相同的excel文件,並通過電子郵件直接作爲附件發送。我們使用org.springframework.mail.MailSender發送郵件。 我不應該使用任何其他外部API,我不知道從哪裏開始。使用AbstractJExcelView在Spring Framework中生成excel文件並通過MailSender發送

這是我們正在做的事情類似的代碼: -

控制器

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++; 
     } 
    } 

}

有什麼辦法d那?我需要生成具有通過和失敗的作業數據的Excel表。我可以處理填充和創建文件,但我不知道如何在緩衝區中生成excel,或者可能在某個臨時目錄中發送郵件時可能再次連接。用戶不需要回應任何提示。我們也不會使用任何http請求。

在此先感謝!

回答

1

我做了以下的,它達到了目的: -

private ByteArrayOutputStream outputStream; 
outputStream = new ByteArrayOutputStream(); 
WritableWorkbook workbook = Workbook.createWorkbook(outputStream); 
. 
. 
. 
.  
workbook.write(); 
workbook.close(); 

現在,一個getter來獲取值: -

public ByteArrayOutputStream getOutputStream() 
{ 
    return this.outputStream; 
} 

最後,電子郵件attachement: -

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); 

謝謝s幫助guyz!

1

在Spring Batch中有一個MimeMessageItemWriter,您應該可以使用它來發送電子郵件。您需要創建一個創建MimeMessage的ItemProcessor。您可以創建Excel文件並將其作爲附件添加到該ItemProcessor中,也可以通過一個步驟生成需要發送的所有Excel文件,然後在下一步中發送它們。我在我的書中將來自Spring Batch的郵件的例子:Pro Spring Batch

相關問題