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/