acoliver    2002/08/15 07:13:34

  Modified:    src/documentation/xdocs who.xml
               src/documentation/xdocs/hssf quick-guide.xml
               src/examples/src/org/apache/poi/hssf/usermodel/examples
                        BigExample.java CreateDateCells.java
               src/java/org/apache/poi/hssf/dev HSSF.java
               src/java/org/apache/poi/hssf/model Workbook.java
               src/java/org/apache/poi/hssf/usermodel HSSFDataFormat.java
                        HSSFWorkbook.java
               src/testcases/org/apache/poi/hssf/usermodel
                        TestCellStyle.java TestWorkbook.java
  Log:
  custom data formats patch: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11068
  
  Revision  Changes    Path
  1.15      +3 -1      jakarta-poi/src/documentation/xdocs/who.xml
  
  Index: who.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/documentation/xdocs/who.xml,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- who.xml   2 May 2002 12:57:40 -0000       1.14
  +++ who.xml   15 Aug 2002 14:13:34 -0000      1.15
  @@ -50,7 +50,9 @@
       </ul>
     </section>
     <section title="Developers">
  -    
  +    <ul>
  +      <li>Shawn Laubach (shawnlaubach at cox dot net)</li>
  +    </ul>
     </section>
    </section>
   
  
  
  
  1.7       +33 -0     jakarta-poi/src/documentation/xdocs/hssf/quick-guide.xml
  
  Index: quick-guide.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/documentation/xdocs/hssf/quick-guide.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- quick-guide.xml   9 Jun 2002 12:48:34 -0000       1.6
  +++ quick-guide.xml   15 Aug 2002 14:13:34 -0000      1.7
  @@ -29,6 +29,7 @@
                       <li><link href="#WorkingWithFonts">Working with 
fonts</link></li>
                       <li><link href="#ReadWriteWorkbook">Reading and 
writing</link></li>
                       <li><link href="#NewLinesInCells">Use newlines in 
cells.</link></li>
  +                    <li><link href="#DataFormats">Create user defined data 
formats.</link></li>
                   </ul>
               </section>
               <section title="Features">
  @@ -324,6 +325,38 @@
       wb.write( fileOut );
       fileOut.close();</source>
                   </section>
  +                <anchor id="DataFormats"/>
  +                <section title="Data Formats">
  +                    <source>
  +    HSSFWorkbook wb = new HSSFWorkbook();
  +    HSSFSheet sheet = wb.createSheet("format sheet");
  +    HSSFCellStyle style;
  +    HSSFDataFormat format = wb.createDataFormat();
  +    HSSFRow row;
  +    HSSFCell cell;
  +    short rowNum = 0;
  +    short colNum = 0;
  +
  +    row = sheet.createRow(rowNum++);
  +    cell = row.createCell(colNum);
  +    cell.setCellValue(11111.25);
  +    style = wb.createCellStyle();
  +    style.setDataFormat(format.getFormat("0.0"));
  +    cell.setCellStyle(style);
  +
  +    row = sheet.createRow(rowNum++);
  +    cell = row.createCell(colNum);
  +    cell.setCellValue(11111.25);
  +    style = wb.createCellStyle();
  +    style.setDataFormat(format.getFormat("#,##0.0000"));
  +    cell.setCellStyle(style);
  +
  +    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
  +    wb.write(fileOut);
  +    fileOut.close();
  +                    </source>
  +                </section>
  +
               </section>
           </section>
       </body>
  
  
  
  1.3       +1 -1      
jakarta-poi/src/examples/src/org/apache/poi/hssf/usermodel/examples/BigExample.java
  
  Index: BigExample.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/examples/src/org/apache/poi/hssf/usermodel/examples/BigExample.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BigExample.java   29 Apr 2002 11:08:22 -0000      1.2
  +++ BigExample.java   15 Aug 2002 14:13:34 -0000      1.3
  @@ -109,7 +109,7 @@
           //set cell stlye
           cs.setFont(f);
           //set the cell format see HSSFDataFromat for a full list
  -        cs.setDataFormat(HSSFDataFormat.getFormat("($#,##0_);[Red]($#,##0)"));
  +        
cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
   
           //set a thin border
           cs2.setBorderBottom(cs2.BORDER_THIN);
  
  
  
  1.2       +1 -1      
jakarta-poi/src/examples/src/org/apache/poi/hssf/usermodel/examples/CreateDateCells.java
  
  Index: CreateDateCells.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/examples/src/org/apache/poi/hssf/usermodel/examples/CreateDateCells.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CreateDateCells.java      27 Feb 2002 11:07:27 -0000      1.1
  +++ CreateDateCells.java      15 Aug 2002 14:13:34 -0000      1.2
  @@ -85,7 +85,7 @@
           // we style the second cell as a date (and time).  It is important to 
create a new cell style from the workbook
           // otherwise you can end up modifying the built in style and effecting not 
only this cell but other cells.
           HSSFCellStyle cellStyle = wb.createCellStyle();
  -        cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));
  +        cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
           cell = row.createCell((short)1);
           cell.setCellValue(new Date());
           cell.setCellStyle(cellStyle);
  
  
  
  1.2       +1 -1      jakarta-poi/src/java/org/apache/poi/hssf/dev/HSSF.java
  
  Index: HSSF.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/dev/HSSF.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HSSF.java 31 Jan 2002 02:23:41 -0000      1.1
  +++ HSSF.java 15 Aug 2002 14:13:34 -0000      1.2
  @@ -145,7 +145,7 @@
           f2.setColor(( short ) 0xf);
           f2.setBoldweight(f2.BOLDWEIGHT_BOLD);
           cs.setFont(f);
  -        cs.setDataFormat(HSSFDataFormat.getFormat("($#,##0_);[Red]($#,##0)"));
  +        
cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
           cs2.setBorderBottom(cs2.BORDER_THIN);
           cs2.setFillPattern(( short ) 1);   // fill w fg
           cs2.setFillForegroundColor(( short ) 0xA);
  
  
  
  1.15      +83 -8     jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java
  
  Index: Workbook.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Workbook.java     29 Jul 2002 13:25:46 -0000      1.14
  +++ Workbook.java     15 Aug 2002 14:13:34 -0000      1.15
  @@ -84,6 +84,7 @@
    * Kit (Microsoft Press) and the documentation at 
http://sc.openoffice.org/excelfileformat.pdf
    * before even attempting to use this.
    *
  + * @author  Shawn Laubach (shawnlaubach at cox.net) (Data Formats)
    * @author  Andrew C. Oliver (acoliver at apache dot org)
    * @author  Glen Stampoultzis (glens at apache.org)
    * @author  Sergei Kozello (sergeikozello at mail.ru)
  @@ -130,6 +131,8 @@
   
       protected ArrayList        boundsheets = new ArrayList();
   
  +    protected ArrayList        formats = new ArrayList();
  +
       protected ArrayList        names = new ArrayList();
   
       protected int              bspos       =
  @@ -150,6 +153,8 @@
       0;   // holds the position of last name record
       private int                supbookpos   =
       0;   // holds the position of sup book
  +    private short              maxformatid  =
  +    -1;  // holds the max format id
   
       private static POILogger   log         =
       POILogFactory.getLogger(Workbook.class);
  @@ -238,6 +243,11 @@
                       log.log(DEBUG, "found SupBook record at " + k);
                       retval.supbookpos = k;
                       break;
  +             case FormatRecord.sid :
  +                 log.log(DEBUG, "found format record at " + k);
  +                 retval.formats.add(rec);
  +                 retval.maxformatid = retval.maxformatid >= 
((FormatRecord)rec).getIndexCode() ? retval.maxformatid : 
((FormatRecord)rec).getIndexCode();
  +                 break;
   
                   default :
               }
  @@ -263,6 +273,7 @@
           log.log(DEBUG, "creating new workbook from scratch");
           Workbook  retval  = new Workbook();
           ArrayList records = new ArrayList(30);
  +        ArrayList formats = new ArrayList(8);
   
           records.add(retval.createBOF());
           records.add(retval.createInterfaceHdr());
  @@ -293,14 +304,17 @@
           records.add(retval.createFont());
           retval.fontpos  = records.size() - 1;   // last font record postion
           retval.numfonts = 4;
  -        records.add(retval.createFormat(0));
  -        records.add(retval.createFormat(1));
  -        records.add(retval.createFormat(2));
  -        records.add(retval.createFormat(3));
  -        records.add(retval.createFormat(4));
  -        records.add(retval.createFormat(5));
  -        records.add(retval.createFormat(6));
  -        records.add(retval.createFormat(7));
  +
  +        // set up format records
  +     for (int i = 0; i <= 7; i++) {
  +            Record    rec;         
  +         rec = retval.createFormat(i);
  +         retval.maxformatid = retval.maxformatid >= 
((FormatRecord)rec).getIndexCode() ? retval.maxformatid : 
((FormatRecord)rec).getIndexCode();
  +         formats.add(rec);
  +         records.add(rec);
  +     }
  +     retval.formats = formats;
  +
           for (int k = 0; k < 21; k++) {
               records.add(retval.createExtendedFormat(k));
               retval.numxfs++;
  @@ -1796,6 +1810,51 @@
           return rec;
       }
   
  +    /**
  +     * Returns a format index that matches the passed in format.  It does not tie 
into HSSFDataFormat.
  +     * @param format the format string
  +     * @param createIfNotFound creates a new format if format not found
  +     * @return the format id of a format that matches or -1 if none found and 
createIfNotFound
  +     */
  +    public short getFormat(String format, boolean createIfNotFound) {
  +     Iterator iterator;
  +     for (iterator = formats.iterator(); iterator.hasNext();) {
  +         FormatRecord r = (FormatRecord)iterator.next();
  +         if (r.getFormatString().equals(format)) {
  +             return r.getIndexCode();
  +         }
  +     }
  +
  +     if (createIfNotFound) {
  +         return createFormat(format);
  +     }
  +
  +     return -1;
  +    }
  +
  +    /**
  +     * Creates a FormatRecord, inserts it, and returns the index code.
  +     * @param format the format string
  +     * @return the index code of the format record.
  +     * @see org.apache.poi.hssf.record.FormatRecord
  +     * @see org.apache.poi.hssf.record.Record
  +     */
  +    public short createFormat(String format) {
  +     FormatRecord rec = new FormatRecord();
  +     maxformatid = maxformatid >= (short)0xa4 ? (short)(maxformatid + 1) : 
(short)0xa4; //Starting value from M$ empiracle study.
  +     rec.setIndexCode(maxformatid);
  +     rec.setFormatStringLength((byte)format.length());
  +     rec.setFormatString(format);
  +
  +     int pos = 0;
  +     while (pos < records.size() && ((Record)records.get(pos)).getSid() != 
FormatRecord.sid) 
  +         pos++;
  +     pos += formats.size();
  +     formats.add(rec);
  +     records.add(pos, rec);
  +     return maxformatid;
  +     }
  +
   
       /**
        * Returns the first occurance of a record matching a particular sid.
  @@ -1803,6 +1862,22 @@
   
       public Record findFirstRecordBySid(short sid) {
           for (Iterator iterator = records.iterator(); iterator.hasNext(); ) {
  +            Record record = ( Record ) iterator.next();
  +            
  +            if (record.getSid() == sid) {
  +                return record;
  +            }
  +        }
  +        return null;
  +    }
  +
  +    /**
  +     * Returns the next occurance of a record matching a particular sid.
  +     */
  +    public Record findNextRecordBySid(short sid, int pos) {
  +        Iterator iterator = records.iterator();
  +     for (;pos > 0 && iterator.hasNext(); iterator.next(),pos--);
  +     while (iterator.hasNext()) {
               Record record = ( Record ) iterator.next();
   
               if (record.getSid() == sid) {
  
  
  
  1.2       +143 -74   
jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormat.java
  
  Index: HSSFDataFormat.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormat.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HSSFDataFormat.java       31 Jan 2002 02:23:44 -0000      1.1
  +++ HSSFDataFormat.java       15 Aug 2002 14:13:34 -0000      1.2
  @@ -1,4 +1,3 @@
  -
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  @@ -60,11 +59,16 @@
    */
   package org.apache.poi.hssf.usermodel;
   
  -import java.util.ArrayList;
  +import java.util.Vector;
   import java.util.List;
  +import java.util.ListIterator;
  +
  +import org.apache.poi.hssf.model.Workbook;
  +import org.apache.poi.hssf.record.Record;
  +import org.apache.poi.hssf.record.FormatRecord;
   
   /**
  - * Utility to identify builin formats.  The following is a list of the formats as
  + * Utility to identify builin formats.  Now can handle user defined data formats 
also.  The following is a list of the formats as
    * returned by this class.<P>
    *<P>
    *       0, "General"<P>
  @@ -112,75 +116,92 @@
   
   public class HSSFDataFormat
   {
  -    private static ArrayList formats;
  +    private static Vector builtinFormats;
  +
  +    private Vector formats = new Vector();
  +    private Workbook workbook;
  +    private boolean movedBuiltins = false;  // Flag to see if need to
  +                                         // check the built in list
  +                                         // or if the regular list
  +                                         // has all entries.
  +
  +    /** 
  +     * Construncts a new data formatter.  It takes a workbook to have
  +     * access to the workbooks format records.
  +     * @param workbook the workbook the formats are tied to.
  +     */
  +    public HSSFDataFormat(Workbook workbook) {
  +     this.workbook = workbook;
  +     if (builtinFormats == null) populateBuiltinFormats();
  +    }
   
  -    private static synchronized void populateFormats()
  +    private static synchronized void populateBuiltinFormats()
       {
  -        formats = new ArrayList();
  -        formats.add(0, "General");
  -        formats.add(1, "0");
  -        formats.add(2, "0.00");
  -        formats.add(3, "#,##0");
  -        formats.add(4, "#,##0.00");
  -        formats.add(5, "($#,##0_);($#,##0)");
  -        formats.add(6, "($#,##0_);[Red]($#,##0)");
  -        formats.add(7, "($#,##0.00);($#,##0.00)");
  -        formats.add(8, "($#,##0.00_);[Red]($#,##0.00)");
  -        formats.add(9, "0%");
  -        formats.add(0xa, "0.00%");
  -        formats.add(0xb, "0.00E+00");
  -        formats.add(0xc, "# ?/?");
  -        formats.add(0xd, "# ??/??");
  -        formats.add(0xe, "m/d/yy");
  -        formats.add(0xf, "d-mmm-yy");
  -        formats.add(0x10, "d-mmm");
  -        formats.add(0x11, "mmm-yy");
  -        formats.add(0x12, "h:mm AM/PM");
  -        formats.add(0x13, "h:mm:ss AM/PM");
  -        formats.add(0x14, "h:mm");
  -        formats.add(0x15, "h:mm:ss");
  -        formats.add(0x16, "m/d/yy h:mm");
  +        builtinFormats = new Vector();
  +        builtinFormats.add(0, "General");
  +        builtinFormats.add(1, "0");
  +        builtinFormats.add(2, "0.00");
  +        builtinFormats.add(3, "#,##0");
  +        builtinFormats.add(4, "#,##0.00");
  +        builtinFormats.add(5, "($#,##0_);($#,##0)");
  +        builtinFormats.add(6, "($#,##0_);[Red]($#,##0)");
  +        builtinFormats.add(7, "($#,##0.00);($#,##0.00)");
  +        builtinFormats.add(8, "($#,##0.00_);[Red]($#,##0.00)");
  +        builtinFormats.add(9, "0%");
  +        builtinFormats.add(0xa, "0.00%");
  +        builtinFormats.add(0xb, "0.00E+00");
  +        builtinFormats.add(0xc, "# ?/?");
  +        builtinFormats.add(0xd, "# ??/??");
  +        builtinFormats.add(0xe, "m/d/yy");
  +        builtinFormats.add(0xf, "d-mmm-yy");
  +        builtinFormats.add(0x10, "d-mmm");
  +        builtinFormats.add(0x11, "mmm-yy");
  +        builtinFormats.add(0x12, "h:mm AM/PM");
  +        builtinFormats.add(0x13, "h:mm:ss AM/PM");
  +        builtinFormats.add(0x14, "h:mm");
  +        builtinFormats.add(0x15, "h:mm:ss");
  +        builtinFormats.add(0x16, "m/d/yy h:mm");
   
           // 0x17 - 0x24 reserved for international and undocumented
  -        formats.add(0x17, "0x17");
  -        formats.add(0x18, "0x18");
  -        formats.add(0x19, "0x19");
  -        formats.add(0x1a, "0x1a");
  -        formats.add(0x1b, "0x1b");
  -        formats.add(0x1c, "0x1c");
  -        formats.add(0x1d, "0x1d");
  -        formats.add(0x1e, "0x1e");
  -        formats.add(0x1f, "0x1f");
  -        formats.add(0x20, "0x20");
  -        formats.add(0x21, "0x21");
  -        formats.add(0x22, "0x22");
  -        formats.add(0x23, "0x23");
  -        formats.add(0x24, "0x24");
  +        builtinFormats.add(0x17, "0x17");
  +        builtinFormats.add(0x18, "0x18");
  +        builtinFormats.add(0x19, "0x19");
  +        builtinFormats.add(0x1a, "0x1a");
  +        builtinFormats.add(0x1b, "0x1b");
  +        builtinFormats.add(0x1c, "0x1c");
  +        builtinFormats.add(0x1d, "0x1d");
  +        builtinFormats.add(0x1e, "0x1e");
  +        builtinFormats.add(0x1f, "0x1f");
  +        builtinFormats.add(0x20, "0x20");
  +        builtinFormats.add(0x21, "0x21");
  +        builtinFormats.add(0x22, "0x22");
  +        builtinFormats.add(0x23, "0x23");
  +        builtinFormats.add(0x24, "0x24");
   
           // 0x17 - 0x24 reserved for international and undocumented
  -        formats.add(0x25, "(#,##0_);(#,##0)");
  -        formats.add(0x26, "(#,##0_);[Red](#,##0)");
  -        formats.add(0x27, "(#,##0.00_);(#,##0.00)");
  -        formats.add(0x28, "(#,##0.00_);[Red](#,##0.00)");
  -        formats.add(0x29, "_(*#,##0_);_(*(#,##0);_(* \"-\"_);_(@_)");
  -        formats.add(0x2a, "_($*#,##0_);_($*(#,##0);_($* \"-\"_);_(@_)");
  -        formats.add(0x2b, "_(*#,##0.00_);_(*(#,##0.00);_(*\"-\"??_);_(@_)");
  -        formats.add(0x2c,
  +        builtinFormats.add(0x25, "(#,##0_);(#,##0)");
  +        builtinFormats.add(0x26, "(#,##0_);[Red](#,##0)");
  +        builtinFormats.add(0x27, "(#,##0.00_);(#,##0.00)");
  +        builtinFormats.add(0x28, "(#,##0.00_);[Red](#,##0.00)");
  +        builtinFormats.add(0x29, "_(*#,##0_);_(*(#,##0);_(* \"-\"_);_(@_)");
  +        builtinFormats.add(0x2a, "_($*#,##0_);_($*(#,##0);_($* \"-\"_);_(@_)");
  +        builtinFormats.add(0x2b, "_(*#,##0.00_);_(*(#,##0.00);_(*\"-\"??_);_(@_)");
  +        builtinFormats.add(0x2c,
                       "_($*#,##0.00_);_($*(#,##0.00);_($*\"-\"??_);_(@_)");
  -        formats.add(0x2d, "mm:ss");
  -        formats.add(0x2e, "[h]:mm:ss");
  -        formats.add(0x2f, "mm:ss.0");
  -        formats.add(0x30, "##0.0E+0");
  -        formats.add(0x31, "@");
  +        builtinFormats.add(0x2d, "mm:ss");
  +        builtinFormats.add(0x2e, "[h]:mm:ss");
  +        builtinFormats.add(0x2f, "mm:ss.0");
  +        builtinFormats.add(0x30, "##0.0E+0");
  +        builtinFormats.add(0x31, "@");
       }
   
  -    public static List getFormats()
  +    public static List getBuiltinFormats()
       {
  -        if (formats == null)
  +        if (builtinFormats == null)
           {
  -            populateFormats();
  +            populateBuiltinFormats();
           }
  -        return formats;
  +        return builtinFormats;
       }
   
       /**
  @@ -189,17 +210,17 @@
        * @return index of format or -1 if undefined.
        */
   
  -    public static short getFormat(String format)
  +    public static short getBuiltinFormat(String format)
       {
  -        if (formats == null)
  +        if (builtinFormats == null)
           {
  -            populateFormats();
  +            populateBuiltinFormats();
           }
           short retval = -1;
   
           for (short k = 0; k < 0x31; k++)
           {
  -            String nformat = ( String ) formats.get(k);
  +            String nformat = ( String ) builtinFormats.get(k);
   
               if ((nformat != null) && nformat.equals(format))
               {
  @@ -211,31 +232,79 @@
       }
   
       /**
  +     * get the format index that matches the given format string.
  +     * Creates a new format if one is not found.
  +     * @param format string matching a built in format
  +     * @return index of format.
  +     */
  +
  +    public short getFormat(String format)
  +    {
  +     ListIterator i;
  +     int ind;
  +     if (!movedBuiltins) {
  +         i = builtinFormats.listIterator();
  +         while (i.hasNext()) {
  +             ind = i.nextIndex();
  +             formats.add(ind, i.next());
  +         }
  +         movedBuiltins = true;
  +     }
  +     i = formats.listIterator();
  +     while (i.hasNext()) {
  +         ind = i.nextIndex();
  +         if (format.equals(i.next())) 
  +             return (short)ind;
  +     }
  +     
  +     ind = workbook.getFormat(format, true);
  +     if (formats.size() <= ind) 
  +         formats.setSize(ind + 1);
  +     formats.add(ind, format);
  +
  +        return (short)ind;
  +    }
  +
  +    /**
  +     * get the format string that matches the given format index
  +     * @param index of a format
  +     * @return string represented at index of format or null if there is not a  
format at that index
  +     */
  +
  +    public String getFormat(short index)
  +    {
  +     if (movedBuiltins)
  +         return ( String ) formats.get(index);
  +     else
  +         return (String) (builtinFormats.get(index) != null ? 
builtinFormats.get(index) : formats.get(index));
  +    }
  +
  +    /**
        * get the format string that matches the given format index
        * @param index of a built in format
        * @return string represented at index of format or null if there is not a 
builtin format at that index
        */
   
  -    public static String getFormat(short index)
  +    public static String getBuiltinFormat(short index)
       {
  -        if (formats == null)
  +        if (builtinFormats == null)
           {
  -            populateFormats();
  +            populateBuiltinFormats();
           }
  -        return ( String ) formats.get(index);
  +        return ( String ) builtinFormats.get(index);
       }
   
       /**
  -     * get the number of builtin and reserved formats
  -     * @return number of builtin and reserved formats
  +     * get the number of builtin and reserved builtinFormats
  +     * @return number of builtin and reserved builtinFormats
        */
   
  -    public static int getNumberOfBuiltinFormats()
  +    public static int getNumberOfBuiltinBuiltinFormats()
       {
  -        if (formats == null)
  +        if (builtinFormats == null)
           {
  -            populateFormats();
  +            populateBuiltinFormats();
           }
  -        return formats.size();
  +        return builtinFormats.size();
       }
   }
  
  
  
  1.10      +12 -1     
jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
  
  Index: HSSFWorkbook.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- HSSFWorkbook.java 28 Jul 2002 22:54:43 -0000      1.9
  +++ HSSFWorkbook.java 15 Aug 2002 14:13:34 -0000      1.10
  @@ -82,6 +82,7 @@
    * @see org.apache.poi.hssf.usermodel.HSSFSheet
    * @author  Andrew C. Oliver (acoliver at apache dot org)
    * @author  Glen Stampoultzis (glens at apache.org)
  + * @author  Shawn Laubach (shawnlaubach at cox.net)
    * @version 2.0-pre
    */
   
  @@ -615,7 +616,17 @@
           names.remove(index);
           workbook.removeName(index);        
       }
  -    
  +
  +        /**
  +     * Creates an instance of HSSFDataFormat.
  +     * @return the HSSFDataFormat object
  +     * @see org.apache.poi.hssf.record.FormatRecord
  +     * @see org.apache.poi.hssf.record.Record
  +     */
  +    public HSSFDataFormat createDataFormat() {
  +     return new HSSFDataFormat(workbook);
  +    }
  +     
       /** remove the named range by his name
        * @param name named range name
        */    
  
  
  
  1.7       +2 -2      
jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java
  
  Index: TestCellStyle.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TestCellStyle.java        29 Apr 2002 11:10:29 -0000      1.6
  +++ TestCellStyle.java        15 Aug 2002 14:13:34 -0000      1.7
  @@ -152,13 +152,13 @@
   
           // with Date:
           HSSFCell cell = row.createCell((short)1);
  -        cs.setDataFormat(HSSFDataFormat.getFormat("m/d/yy"));
  +        cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
           cell.setCellStyle(cs);
           cell.setCellValue(new Date());
   
           // with Calendar:
           cell = row.createCell((short)2);
  -        cs.setDataFormat(HSSFDataFormat.getFormat("m/d/yy"));
  +        cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
           cell.setCellStyle(cs);
           Calendar cal = Calendar.getInstance();
           cal.setTime(new Date());
  
  
  
  1.4       +29 -0     
jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java
  
  Index: TestWorkbook.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestWorkbook.java 10 May 2002 03:01:11 -0000      1.3
  +++ TestWorkbook.java 15 Aug 2002 14:13:34 -0000      1.4
  @@ -234,6 +234,35 @@
       }
   
       /**
  +     * TEST NAME:  Test Read Simple w/ Data Format<P>
  +     * OBJECTIVE:  Test that HSSF can read a simple spreadsheet 
(SimpleWithDataFormat.xls).<P>
  +     * SUCCESS:    HSSF reads the sheet.  Matches values in their particular 
positions and format is correct<P>
  +     * FAILURE:    HSSF does not read a sheet or excepts.  HSSF cannot identify 
values
  +     *             in the sheet in their known positions.<P>
  +     *
  +     */
  +
  +    public void testReadSimpleWithDataFormat()
  +        throws IOException
  +    {
  +        String filename = System.getProperty("HSSF.testdata.path");
  +
  +        filename = filename + "/SimpleWithDataFormat.xls";
  +        FileInputStream stream   = new FileInputStream(filename);
  +        POIFSFileSystem fs       = new POIFSFileSystem(stream);
  +        HSSFWorkbook    workbook = new HSSFWorkbook(fs);
  +        HSSFSheet       sheet    = workbook.getSheetAt(0);
  +        HSSFDataFormat  format   = workbook.createDataFormat();
  +
  +        assertEquals(1.25,
  +                     sheet.getRow(( short ) 0).getCell(( short ) 0)
  +                         .getNumericCellValue(), 1e-10);
  +
  +     assertEquals(format.getFormat("0.0"), 0xa4);
  +        stream.close();
  +    }
  +
  +    /**
        * TEST NAME:  Test Read Employee Simple <P>
        * OBJECTIVE:  Test that HSSF can read a simple spreadsheet (Employee.xls).<P>
        * SUCCESS:    HSSF reads the sheet.  Matches values in their particular 
positions.<P>
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to