One of the problems of using ServletOutputStream to stream back 
the contents of the file is if the user cancels the operation, you shall 
see lot of exceptions in your log files. I had this problem a while back. 
I then changed the code to create files on the server and send back a 
reference to it to the user in response html. If you think about it, 
cleanup is not that bad because you can make sure that the same directory 
is used to create files on the server and you can have a cleanup script (a 
cron job) to cleanup these files at the end of the day or week depending 
on user activity and your storage needs.
Abhi.





"Tahir Akhtar" <[EMAIL PROTECTED]> 
01/26/2007 09:37 AM
Please respond to
"POI Users List" <[email protected]>


To
"'POI Users List'" <[email protected]>
cc

Subject
RE: How to use POI (Newbie)






Hi

> -----Original Message-----
> From: Rohilla, Vishal [mailto:[EMAIL PROTECTED]
> Sent: Friday, January 26, 2007 7:31 PM
> To: [email protected]
> Subject: RE: How to use POI (Newbie)
> 
> Thanks Mike,
> 
> It helped. When I gave the absolute path it created the file at the
> appropriate location. I also noticed w/o absolute location it was 
creating
> the file in my weblogic domains directory.
> 
> Now it raises the question, in production it is not a good idea to 
create
> the file at some location at user's box. Should one use
> ServletOutputStream over FileOutputStream in this case?
> 
[Tahir Akhtar] You cannot create a file at user's box. All you can do is 
to
stream back the content through servlet stream with appropriate mime
headers. User will see their browser's save/open dialog in this case. OTH
you can generate a file on server with a random/autogenerated name and 
send
bank a href to it in response html. In this case you will have to manage
cleanup of generated files.

> Thanks again for all the help.
> 
> Vishal
> 
> ________________________________
> 
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Thu 1/25/2007 10:21 AM
> To: [email protected]
> Subject: RE: How to use POI (Newbie)
> 
> 
> 
> The code worked for me. Since you're using a FileOutputStream in a
> Servlet and not using an absolute target path but just a relative
> filename, I assume you just looked in the wrong place for the file. Or
> you code was not even called. Out of topic.
> 
> Attached, my slightly reformatted code which worked.
> 
> --
> Mike Haller
> Innovations
> 
> import java.io.FileOutputStream;
> 
> import org.apache.poi.hssf.usermodel.HSSFCell;
> import org.apache.poi.hssf.usermodel.HSSFCellStyle;
> import org.apache.poi.hssf.usermodel.HSSFDataFormat;
> import org.apache.poi.hssf.usermodel.HSSFFont;
> import org.apache.poi.hssf.usermodel.HSSFRow;
> import org.apache.poi.hssf.usermodel.HSSFSheet;
> import org.apache.poi.hssf.usermodel.HSSFWorkbook;
> 
> public class ReportAction {
> 
>         public static void main(String[] args) throws Exception {
>                 short rownum;
>                 FileOutputStream out = new
> FileOutputStream("c:\\workbook.xls");
>                 HSSFWorkbook wb = new HSSFWorkbook();
>                 HSSFSheet s = wb.createSheet();
>                 HSSFRow r = null;
>                 HSSFCell c = null;
>                 HSSFCellStyle cs = wb.createCellStyle();
>                 HSSFCellStyle cs2 = wb.createCellStyle();
>                 HSSFCellStyle cs3 = wb.createCellStyle();
>                 HSSFDataFormat df = wb.createDataFormat();
>                 HSSFFont f = wb.createFont();
>                 HSSFFont f2 = wb.createFont();
>                 f.setFontHeightInPoints((short) 12);
>                 f.setColor((short) 0xc);
>                 f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
>                 f2.setFontHeightInPoints((short) 10);
>                 f2.setColor((short) HSSFFont.COLOR_RED); // make it bold
>                 f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
>                 f2.setStrikeout(true);
>                 cs.setFont(f);
>                 cs.setDataFormat(df.getFormat("#,##0.0"));
>                 cs2.setBorderBottom(cs2.BORDER_THIN);
>                 cs2.setFillPattern((short)
> HSSFCellStyle.SOLID_FOREGROUND); // set the
> 
> cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
>                 cs2.setFont(f2);
>                 wb.setSheetName(0,
> "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F "
>                                 +
> "\u0421\u0442\u0440\u0430\u043D\u0438\u0447\u043A\u0430",
>                                 HSSFWorkbook.ENCODING_UTF_16);
>                 for (rownum = (short) 0; rownum < 30; rownum++) {
>                         r = s.createRow(rownum);
>                         if ((rownum % 2) == 0) {
>                                 r.setHeight((short) 0x249);
>                         }
>                         for (short cellnum = (short) 0; cellnum < 10;
> cellnum += 2) {
>                                 c = r.createCell(cellnum);
>                                 c
>                                                 .setCellValue(rownum
>                                                                 * 10000
>                                                                 +
> cellnum
>                                                                 +
> (((double) rownum / 1000) + ((double) cellnum / 10000)));
>                                 String cellValue;
>                                 c = r.createCell((short) (cellnum + 1));
>                                 if ((rownum % 2) == 0) {
>                                         c.setCellStyle(cs);
> 
> c.setEncoding(HSSFCell.ENCODING_COMPRESSED_UNICODE);
>                                         c.setCellValue("Test");
>                                 } else {
>                                         c.setCellStyle(cs2);
> 
> c.setEncoding(HSSFCell.ENCODING_UTF_16);
> 
> c.setCellValue("\u0422\u0435\u0441\u0442");
>                                 }
>                                 s.setColumnWidth((short) (cellnum + 1),
>                                                 (short) ((50 * 8) /
> ((double) 1 / 20)));
>                         }
>                 }
>                 rownum++;
>                 rownum++;
>                 r = s.createRow(rownum);
>                 cs3.setBorderBottom(cs3.BORDER_THICK);
>                 for (short cellnum = (short) 0; cellnum < 50; cellnum++)
> {
>                         c = r.createCell(cellnum);
>                         c.setCellStyle(cs3);
>                 }
>                 s = wb.createSheet();
>                 s.setSelected(true);
>                 wb.setSheetName(1, "DeletedSheet");
>                 try {
>                         wb.write(out);
>                 } finally {
>                         out.close();
>                 }
>         }
> }
> -----Original Message-----
> From: Rohilla, Vishal [mailto:[EMAIL PROTECTED]
> Sent: Thursday, January 25, 2007 4:08 PM
> To: POI Users List
> Subject: RE: How to use POI (Newbie)
> 
> Yes I did close the fileoutputstream in the finally block. For the
> reference here is the code:
> 
> public class ReportAction extends Action implements GlobalValues {
> 
>  public ActionForward execute(ActionMapping mapping, ActionForm form,
> HttpServletRequest request,
>    HttpServletResponse response)throws Exception  {
>   short rownum;
> //   create a new file
>   FileOutputStream out = new FileOutputStream("workbook.xls");
> //   create a new workbook
>   HSSFWorkbook wb = new HSSFWorkbook();
> //   create a new sheet
>   HSSFSheet s = wb.createSheet();
> //   declare a row object reference
>   HSSFRow r = null;
> //   declare a cell object reference
>   HSSFCell c = null;
> //   create 3 cell styles
>   HSSFCellStyle cs = wb.createCellStyle();
>   HSSFCellStyle cs2 = wb.createCellStyle();
>   HSSFCellStyle cs3 = wb.createCellStyle();
>   HSSFDataFormat df = wb.createDataFormat();
> //   create 2 fonts objects
>   HSSFFont f = wb.createFont();
>   HSSFFont f2 = wb.createFont();
> //  set font 1 to 12 point type
>   f.setFontHeightInPoints((short) 12);
> //  make it blue
>   f.setColor( (short)0xc );
> //   make it bold
> //  arial is the default font
>   f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
> //  set font 2 to 10 point type
>   f2.setFontHeightInPoints((short) 10);
> //  make it red
>   f2.setColor( (short)HSSFFont.COLOR_RED ); //  make it bold
>   f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
>   f2.setStrikeout( true );
> //  set cell stlye
>   cs.setFont(f);
> //  set the cell format
>   cs.setDataFormat(df.getFormat("#,##0.0"));
> //  set a thin border
>   cs2.setBorderBottom(cs2.BORDER_THIN);
> //  fill w fg fill color
>   cs2.setFillPattern((short) HSSFCellStyle.SOLID_FOREGROUND); //  set
> the cell format to text see HSSFDataFormat for a full list
>   cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
> //   set the font
>   cs2.setFont(f2);
> //   set the sheet name in Unicode
>   wb.setSheetName(0, "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F "
> +
> 
> "\u0421\u0442\u0440\u0430\u043D\u0438\u0447\u043A\u0430",
>                   HSSFWorkbook.ENCODING_UTF_16 );
> //   in case of compressed Unicode
> //   wb.setSheetName(0, "HSSF Test",
> HSSFWorkbook.ENCODING_COMPRESSED_UNICODE );
> //   create a sheet with 30 rows (0-29)
>   for (rownum = (short) 0; rownum < 30; rownum++)
>   {
>       // create a row
>       r = s.createRow(rownum);
>       // on every other row
>       if ((rownum % 2) == 0)
>       {
>           // make the row height bigger  (in twips - 1/20 of a point)
>           r.setHeight((short) 0x249);
>       }
>       //r.setRowNum(( short ) rownum);
>       // create 10 cells (0-9) (the += 2 becomes apparent later
>       for (short cellnum = (short) 0; cellnum < 10; cellnum += 2)
>       {
>           // create a numeric cell
>           c = r.createCell(cellnum);
>           // do some goofy math to demonstrate decimals
>           c.setCellValue(rownum * 10000 + cellnum
>                   + (((double) rownum / 1000)
>                   + ((double) cellnum / 10000)));
>           String cellValue;
>           // create a string cell (see why += 2 in the
>           c = r.createCell((short) (cellnum + 1));
> 
>           // on every other row
>           if ((rownum % 2) == 0)
>           {
>               // set this cell to the first cell style we defined
>               c.setCellStyle(cs);
>               // set the cell's string value to "Test"
>               c.setEncoding( HSSFCell.ENCODING_COMPRESSED_UNICODE );
>               c.setCellValue( "Test" );
>           }
>           else
>           {
>               c.setCellStyle(cs2);
>               // set the cell's string value to
> "\u0422\u0435\u0441\u0442"
>               c.setEncoding( HSSFCell.ENCODING_UTF_16 );
>               c.setCellValue( "\u0422\u0435\u0441\u0442" );
>           }
> 
>           // make this column a bit wider
>           s.setColumnWidth((short) (cellnum + 1), (short) ((50 * 8) /
> ((double) 1 / 20)));
>       }
>   }
> //  draw a thick black border on the row at the bottom using BLANKS
> //   advance 2 rows
>   rownum++;
>   rownum++;
>   r = s.createRow(rownum);
> //   define the third style to be the default
> //   except with a thick black border at the bottom
>   cs3.setBorderBottom(cs3.BORDER_THICK);
> //  create 50 cells
>   for (short cellnum = (short) 0; cellnum < 50; cellnum++)
>   {
>       //create a blank type cell (no value)
>       c = r.createCell(cellnum);
>       // set it to the thick black border style
>       c.setCellStyle(cs3);
>   }
> //  end draw thick black border
> 
> //   demonstrate adding/naming and deleting a sheet
> //   create a sheet, set its title then delete it
>   s = wb.createSheet();
>   s.setSelected(true);
>   wb.setSheetName(1, "DeletedSheet");
> //  wb.removeSheetAt(1);
> //  end deleted sheet
> //   write the workbook to the output stream
> //   close our file (don't blow out our file handles
> //  wb.write(out);
> //  out.close();
> //  ServletOutputStream out = response.getOutputStream();
>   try
>   {
> //   response.setContentType("application/vnd.ms-excel");
> //   response.setHeader("Content-disposition","attachment;filename" +
> "workBook");
> //   out.write(wb.getBytes());
>    wb.write(out);
>   }
>   catch(IOException io)
>   {
>    ActionErrors errors = new ActionErrors();
>    ActionError error = new ActionError("error.fileretrieve.ioexception",
> io.getMessage());
>    errors.add( ActionErrors.GLOBAL_ERROR, error);
>    saveErrors( request, errors );
> //   EWODatabaseLogger.getInstance().log(session, "File Retrieve",
> io.getMessage());
> //   eWOLogger.write(DEBUG,io.getMessage(),io);
>    return mapping.findForward("error");
>   }
>   finally
>   {
>    out.close();
>   }
> 
>   return mapping.findForward("success");  } }
> 
> 
> ________________________________
> 
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Thu 1/25/2007 9:27 AM
> To: [email protected]
> Subject: RE: How to use POI (Newbie)
> 
> 
> 
> 1) Try any other mirror and look in the "dev" subfolder instead of the
> "release" subfolder.
> 2) Did you close the FileOutputStream as described in the text above the
> code sample?
> 
> 
> --
> Mike Haller
> Innovations
> 
> -----Original Message-----
> From: Rohilla, Vishal [mailto:[EMAIL PROTECTED]
> Sent: Thursday, January 25, 2007 3:24 PM
> To: POI Users List
> Subject: RE: How to use POI (Newbie)
> 
> When I go to download the jars at Jakarta POI site at the following URL:
> -
> 
> http://www.apache.org/dyn/closer.cgi/jakarta/poi/
> 
> I am not able to find poi-bin-3.0-alpha3-20061212 version. The version I
> get is is
> 
> poi-bin-2.5.1-final-20040804.zip
> 
> In the sample code I tried to run the code to export the data to the
> spreadsheet. The code is at the the following URL: -
> http://jakarta.apache.org/poi/hssf/how-to.html in the heading  'User
> API'  sub heading - 'Writing a new one'
> 
> It didn't through any error but also didn't create or open the new
> spreadsheet.
> 
> Could you please throw some light about how should one proceed to use
> HSSF to export data to excel spreadsheet?
> 
> Vishal
> 
> 
> 
> 
> 
> 
> 
> ________________________________
> 
> From: Tahir Akhtar [mailto:[EMAIL PROTECTED]
> Sent: Thu 1/25/2007 2:17 AM
> To: 'POI Users List'
> Subject: RE: How to use POI (Newbie)
> 
> 
> 
> Hi Rohilla
> 
> 1. Its advisable to use the latest release poi-bin-3.0-alpha3-20061212.
> 2. There is nothing special about poi jars. Just use it as you use any
> java library i-e include it in your classpath(or out it in your
> WEB-INF/lib) and reference the classes via import statement or fully
> qualified class names in your code.
> 
> What error are you getting when trying to run the sample code?
> 
> Wassalam
> Tahir
> 
> -----Original Message-----
> From: Rohilla, Vishal [mailto:[EMAIL PROTECTED]
> Sent: Thursday, January 25, 2007 2:31 AM
> To: [email protected]
> Subject: How to use POI (Newbie)
> 
> I downloaded the POI code from the mirror: -
> 
> http://mirror.candidhosting.com/pub/apache/jakarta/poi/release/
> 
> In the downloaded code I found the following jars: -
> 
> 1) poi-2.5.1-final-20040804.jar
> 2) poi-contrib-2.5.1-final-20040804.jar
> 3) poi-scratchpad-2.5.1-final-20040804.jar
> 
> Does anybody have any ideas about how to plugin poi jars and to start
> using it for sample examples at least.
> 
> I have gone throgh the documentation couldn't find instructions abt it.
> 
> Your help will be highly appreciated.
> 
> P.S - I added poi-2.5.1-final-20040804.jar in my WAR file and run one of
> the sample code  in "How To" Section to export the data to spreadsheet.
> But no luck.
> 
> Thanks
> 
> The contents of this e-mail are intended for the named addressee only.
> It contains information that may be confidential. Unless you are the
> named addressee or an authorized designee, you may not copy or use it,
> or disclose it to anyone else. If you received it in error please notify
> us immediately and then destroy it.
> 
> 
> 
> ---------------------------------------------------------------------
> 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/
> 
> 
> 
> The contents of this e-mail are intended for the named addressee only.
> It contains information that may be confidential. Unless you are the
> named addressee or an authorized designee, you may not copy or use it,
> or disclose it to anyone else. If you received it in error please notify
> us immediately and then destroy it.
> 
> 
> ---------------------------------------------------------------------
> 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/
> 
> 
> 
> The contents of this e-mail are intended for the named addressee only.
> It contains information that may be confidential. Unless you are the
> named addressee or an authorized designee, you may not copy or use it,
> or disclose it to anyone else. If you received it in error please notify
> us immediately and then destroy it.
> 
> 
> ---------------------------------------------------------------------
> 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/
> 
> 
> 
> The contents of this e-mail are intended for the named addressee only. 
It
> contains information that may be confidential. Unless you are the named
> addressee or an authorized designee, you may not copy or use it, or
> disclose it to anyone else. If you received it in error please notify us
> immediately and then destroy it.
[Tahir Akhtar] 
Wassalam



---------------------------------------------------------------------
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/





-----------------------------------------
This transmission may contain information that is privileged,
confidential, legally privileged, and/or exempt from disclosure
under applicable law.  If you are not the intended recipient, you
are hereby notified that any disclosure, copying, distribution, or
use of the information contained herein (including any reliance
thereon) is STRICTLY PROHIBITED.  Although this transmission and
any attachments are believed to be free of any virus or other
defect that might affect any computer system into which it is
received and opened, it is the responsibility of the recipient to
ensure that it is virus free and no responsibility is accepted by
JPMorgan Chase & Co., its subsidiaries and affiliates, as
applicable, for any loss or damage arising in any way from its use.
If you received this transmission in error, please immediately
contact the sender and destroy the material in its entirety,
whether in electronic or hard copy format. Thank you.

Reply via email to