Hello,

have you tried writing the ByteArrayOutputStream to the
ServletOutputStream???

Some code snippet that is working for me (inside a servlet):

        ServletOutputStream out            = null;
        
        response.setContentType( "application/vnd.ms-excel;
charset=windows-1252" );
        response.setHeader( "Content-Disposition"
                          , "attachment; filename=test.xls" );

        out = response.getOutputStream();

        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
        wb.write( byteArrayOut );        

        out.write( byteArrayOut.toByteArray() );

Does this work?

Markus

> Many thanks, Markus
> 
> It seems to me that, doing as you say, I'm closing the barn 
> door after 
> the horses are gone.
> 
> My code (after I've created the HSSFWorkbook wb):
> 
>     ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
>     wb.write(byteArrayOut);
>     response.setContentLength((byteArrayOut.toByteArray()).length);
>     byteArrayOut.flush();
>     byteArrayOut.close();
> 
> As I said, it seems to me that the Stream is already sent by the time 
> I'm telling the browser how long the Stream is.  Additionally, using 
> this construct has broken access via OpenOffice 2.0 Calc 
> (says that it 
> can't convert this Excel format) and it produces a blank spreadsheet 
> when using IE and Excel.  Am I doing it wrong?  If I'm doing 
> it right, 
> then I must be fighting a different issue.
> 
> Thanks again,
> 
> Dick
> 
> Heck Markus wrote:
> 
> >Hello,
> >
> >you can write the HHSFWorkbook to a ByteArrayOutputStream:
> >
> >    HSSFWorkbook workBook                 = null;
> >    ByteArrayOutputStream byteArrayOut    = null;
> >    ...
> >    creating the Workbook
> >    ...
> >    byteArrayOut = new ByteArrayOutputStream();
> >    workBook.write( byteArrayOut );
> >
> >And with byteArrayOut.toByteArray().length you get the desired 
> >information.
> >
> >Regards
> >
> >Markus
> >
> >  
> >
> >>-----Original Message-----
> >>From: Dick Hildreth [mailto:[EMAIL PROTECTED]
> >>Sent: Monday, December 12, 2005 10:55 PM
> >>To: POI Users List
> >>Subject: Re: HSSF Failure in IE
> >>
> >>
> >>Vielen dank, Christian!
> >>
> >>I already had the Header Properties set up as you suggest.  I
> >>set them 
> >>in a slightly different order, though I don't expect that 
> >>would be an issue.
> >>
> >>One difference was that I had setDateHeader("Expires", 0)
> >>where you have 
> >>setHeader("Expires", 0).
> >>
> >>I don't understand, however, how to use a byte[] for intermediate
> >>buffering as you suggest.  As I noted initially, I tried the 
> >>HSSFWorkbook.getBytes() method, but that broke everything.  I 
> >>can't find 
> >>another way to implement the byte[] construct.
> >>
> >>Any further help would be most welcomed.
> >>
> >>Tschuess!
> >>
> >>Dick
> >>
> >>Christian Gosch wrote:
> >>
> >>    
> >>
> >>>(1) Use a byte[] for intermediate buffering, that should tell the
> >>>truth. If things get too big, you may underly a temp file.
> >>>(2) There are RFCs about how to set up the HTTP response header 
> >>>according to HTTP 1.0 or 1.1 (therefore you should know what 
> >>>      
> >>>
> >>your HTTP
> >>    
> >>
> >>>server component talks to its clients), but for IE that is
> >>>      
> >>>
> >>not really
> >>    
> >>
> >>>appropriate, because:
> >>>(3) MSIE has really strange methods of claiming knowledge
> >>>      
> >>>
> >>about what is to
> >>    
> >>
> >>>come over the net; nevertheless it is all documented on MS's
> >>>      
> >>>
> >>website. Among
> >>    
> >>
> >>>the strange things is that in older versions (than 6) IE
> >>>      
> >>>
> >>used to send up to
> >>    
> >>
> >>>3 requests to fetch 1 file / resource. (I by myself have 
> seen up to 3 
> >>>dialogue boxes asking the user what to do.)
> >>>
> >>>
> >>>We currently succeed on IE6 with some HTTP response header settings
> >>>like the
> >>>following:
> >>>
> >>>private void setHeaderProperties(HttpServletResponse
> >>>      
> >>>
> >>response, String
> >>    
> >>
> >>>filename) {
> >>> response.setHeader("Cache-Control", "public");  
> >>>response.setHeader("Pragma", "public");  
> >>>response.setHeader("Expires", "0");  response.setHeader(
> >>>  "Content-Disposition",
> >>>  "attachment; filename=\""
> >>>   + filename
> >>>   + ".xls\";");
> >>> response.setContentType("application/vnd.ms-excel");
> >>>}
> >>>
> >>>
> >>>Notice the content type since it is no 'real' type based 
> on any RFC.
> >>>This is just to confuse the IE file type recognition so that 
> >>>      
> >>>
> >>we get a
> >>    
> >>
> >>>Open/Save box for the end user.
> >>>
> >>>After that we calculate the real content byte count by using an
> >>>intermediate byte[], set this value as content length and 
> >>>      
> >>>
> >>finally put
> >>    
> >>
> >>>the byte[] into the OutputStream (and flush it).
> >>>
> >>>
> >>>The other thing is that this is NOT TESTED for any other
> >>>      
> >>>
> >>browser than
> >>    
> >>
> >>>IE (because we do not need to care about the better ones ;-) )
> >>>
> >>>
> >>>Regards,
> >>>Christian
> >>>
> >>>
> >>>On Monday, December 12, 2005 2:56 AM [GMT+1=CET],
> >>>Dick Hildreth <[EMAIL PROTECTED]> wrote:
> >>>
> >>> 
> >>>
> >>>      
> >>>
> >>>>I have built an application for creating and displaying an Excel
> >>>>spreadsheet.  It works beautifully when accessed using Mozilla or 
> >>>>Firefox (haven't tested with Netscape) but fails when using MSIE.
> >>>>
> >>>>It appears that IE refuses to download the file (it also doesn't
> >>>>recognize the content type) since, when Excel or OOo Calc 
> >>>>        
> >>>>
> >>open, they
> >>    
> >>
> >>>>complain that the file (in the Temporary Internet Files directory
> >>>>structure) isn't found.  It isn't found for good reason - it isn't
> >>>>there!
> >>>>
> >>>>From browsing other projects, such as iText on SourceForge, it
> >>>>appears that IE demands to know how big the stream is 
> >>>>(setContentLength). Unfortunately, I can't figure out how 
> >>>>        
> >>>>
> >>to measure
> >>    
> >>
> >>>>the length to set it properly.  JavaDocs explicitly says that
> >>>>WorkBook.getBytes() "get(s) the bytes of just the HSSF
> >>>>        
> >>>>
> >>portions of the
> >>    
> >>
> >>>>XLS file".  Apparently, there are bytes being sent other 
> than these
> >>>>bytes, since stting the ContentLength to the lenth of
> >>>>getBytes() causes the geckop browsers to fail also.
> >>>>
> >>>>I would appreciate some insight as to how I might overcome this
> >>>>problem.
> >>>>
> >>>>
> >>>>------------------------------------------------------------
> >>>>        
> >>>>
> >>---------
> >>    
> >>
> >>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>>Mailing List:     http://jakarta.apache.org/site/mail2.html#poi
> >>>>The Apache Jakarta Poi Project:  http://jakarta.apache.org/poi/
> >>>>   
> >>>>
> >>>>        
> >>>>
> >>>Gruesse,
> >>> 
> >>>
> >>>      
> >>>
> >>    
> >>
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >Mailing List:     http://jakarta.apache.org/site/mail2.html#poi
> >The Apache Jakarta Poi Project:  http://jakarta.apache.org/poi/
> >
> >
> >  
> >
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List:     http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta Poi Project:  http://jakarta.apache.org/poi/

Reply via email to