2014-01-29 4 views
0

현재 내 프로젝트는 Controller 클래스를 사용하고 AbstractJExcelView 클래스를 사용하여 엑셀 파일을 열거 나 저장하라는 메시지를 사용자에게 제공하는 Excel 보고서를 생성합니다. Basicall 그것은 컨트롤러를 호출하기 위해 http 프로토콜을 사용합니다. 이제 (스프링) 일괄 처리 작업 동안 동일한 Excel 파일을 생성하고 전자 메일을 통해 첨부 파일로 직접 보내야합니다. 우리는 메일을 보내기 위해 org.springframework.mail.MailSender를 사용하고 있습니다. 다른 외부 API를 사용하지 않아도되며 어디서부터 시작해야하는지 전혀 알지 못합니다.AbstractJExcelView를 사용하여 Excel 파일을 생성하고 Spring Framework의 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(); 

지금, 게터가 값을 가져올를

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

감사 도움 guyz에 대한이야!

1

이메일을 보내는 데 사용할 수 있어야하는 Spring Batch에는 MimeMessageItemWriter가 있습니다. MimeMessage를 생성하는 ItemProcessor를 생성해야합니다. Excel 파일을 만들어 ItemProcessor 내에 첨부 파일로 추가하거나 보내야 할 모든 Excel 파일을 한 단계 생성하고 다음 단계에서 보낼 수 있습니다. 내 책에 스프링 배치에서 이메일을 보내는의 예를 가지고 : Pro Spring Batch