Отправить файл Excel (в памяти) в виде вложения в Google App Engine - PullRequest
0 голосов
/ 05 октября 2011

Я погуглил и попробовал несколько подходов, но потерпел неудачу.Вот вопрос: я пытаюсь создать файл Excel (используя JExcelApi) и отправить его по электронной почте в виде вложения в движке приложений Google.

public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    Properties props = new Properties();
    Session session = Session.getDefaultInstance(props, null);

    try {
        //write the excel file
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        WritableWorkbook workbook = Workbook.createWorkbook(outputStream);
        //first sheet
        WritableSheet sheet = workbook.createSheet("Param", 0);
        Label label11 = new Label(0, 0, "parameter is"); 
        sheet.addCell(label11);
        Label label12 = new Label(1, 0, "worker"); 
        sheet.addCell(label12);

        //second sheet
        WritableSheet sheet2 = workbook.createSheet("Info", 1);
        Label label21 = new Label(0, 0, "Info is"); 
        sheet2.addCell(label21);
        Label label22 = new Label(1, 0, "consumer"); 
        sheet2.addCell(label22);

        workbook.write(); 
        workbook.close();

        //email the excel file as an attachment
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("//my gmail", "Sr."));
        msg.addRecipient(Message.RecipientType.TO,
            new InternetAddress("//my gmail", "Mr. "));
        msg.setSubject("Your excel file is here");

        Multipart mp = new MimeMultipart();
        MimeBodyPart htmlPart = new MimeBodyPart();        
        htmlPart.setContent("please review", "text/html");
        mp.addBodyPart(htmlPart);

        MimeBodyPart attachment = new MimeBodyPart();
        attachment.setFileName("report.xls");
        attachment.setContent(outputStream.toByteArray(), "application/vnd.ms-excel");              
        mp.addBodyPart(attachment);

        msg.setContent(mp);
        Transport.send(msg);

    } catch (RowsExceededException e) {
        /* foo */
    }
}

Я загрузил, но письмо с прикрепленным Excel никогда не отправлялось на мойпочтовый ящик.outputStream.toByteArray() может и не подходить, но другие, которые я пробовал, тоже не работали.

1 Ответ

1 голос
/ 06 октября 2011

Решите это. Но кто-нибудь может это объяснить?Потому что какое-то ограничение движка приложения Google?Благодарю.

DataSource src = new ByteArrayDataSource(outputStream.toByteArray()
                                       , "application/vnd.ms-excel");

attachment.setDataHandler(new DataHandler(src));
...