]> source.dussan.org Git - poi.git/commitdiff
Applied patch to convert LabelRecords to LabelSSTRecords from bug19053
authorJason Height <jheight@apache.org>
Fri, 26 Aug 2005 03:40:34 +0000 (03:40 +0000)
committerJason Height <jheight@apache.org>
Fri, 26 Aug 2005 03:40:34 +0000 (03:40 +0000)
Modified slightly so that not all of the records are checked.

Jason

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353774 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/model/Sheet.java
src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java

index f21378751feee35c6ad7259889e79e21d8bbae33..81edc05e19d2de018ce2096c963918aa7a9c9bd6 100644 (file)
@@ -576,53 +576,6 @@ public class Sheet implements Model
         return numMergedRegions;
     }
 
-    /**
-     * This is basically a kludge to deal with the now obsolete Label records.  If
-     * you have to read in a sheet that contains Label records, be aware that the rest
-     * of the API doesn't deal with them, the low level structure only provides read-only
-     * semi-immutable structures (the sets are there for interface conformance with NO
-     * impelmentation).  In short, you need to call this function passing it a reference
-     * to the Workbook object.  All labels will be converted to LabelSST records and their
-     * contained strings will be written to the Shared String tabel (SSTRecord) within
-     * the Workbook.
-     *
-     * @param wb sheet's matching low level Workbook structure containing the SSTRecord.
-     * @see org.apache.poi.hssf.record.LabelRecord
-     * @see org.apache.poi.hssf.record.LabelSSTRecord
-     * @see org.apache.poi.hssf.record.SSTRecord
-     */
-
-    public void convertLabelRecords(Workbook wb)
-    {
-        if (log.check( POILogger.DEBUG ))
-            log.log(POILogger.DEBUG, "convertLabelRecords called");
-        if (containsLabels)
-        {
-            for (int k = 0; k < records.size(); k++)
-            {
-                Record rec = ( Record ) records.get(k);
-
-                if (rec.getSid() == LabelRecord.sid)
-                {
-                    LabelRecord oldrec = ( LabelRecord ) rec;
-
-                    records.remove(k);
-                    LabelSSTRecord newrec   = new LabelSSTRecord();
-                    int            stringid =
-                        wb.addSSTString(new UnicodeString(oldrec.getValue()));
-
-                    newrec.setRow(oldrec.getRow());
-                    newrec.setColumn(oldrec.getColumn());
-                    newrec.setXFIndex(oldrec.getXFIndex());
-                    newrec.setSSTIndex(stringid);
-                          records.add(k, newrec);
-                }
-            }
-        }
-        if (log.check( POILogger.DEBUG ))
-            log.log(POILogger.DEBUG, "convertLabelRecords exit");
-    }
-
     /**
      * Returns the number of low level binary records in this sheet.  This adjusts things for the so called
      * AgregateRecords.
index 414ff24a14e64e938085c8f67fa4ab21eb0fa254..fe6559a8c16b04938b99b46c9d06a7def4832218 100644 (file)
@@ -186,14 +186,14 @@ public class HSSFWorkbook
         setPropertiesFromWorkbook(workbook);
         int recOffset = workbook.getNumRecords();
         int sheetNum = 0;
-
+        
+        // convert all LabelRecord records to LabelSSTRecord
+        convertLabelRecords(records, recOffset);        
         while (recOffset < records.size())
         {
             Sheet sheet = Sheet.createSheet(records, sheetNum++, recOffset );
 
             recOffset = sheet.getEofLoc()+1;
-            sheet.convertLabelRecords(
-                    workbook);   // convert all LabelRecord records to LabelSSTRecord
             HSSFSheet hsheet = new HSSFSheet(workbook, sheet);
 
             sheets.add(hsheet);
@@ -240,6 +240,51 @@ public class HSSFWorkbook
 
         // none currently
     }
+    
+    /**
+      * This is basically a kludge to deal with the now obsolete Label records.  If
+      * you have to read in a sheet that contains Label records, be aware that the rest
+      * of the API doesn't deal with them, the low level structure only provides read-only
+      * semi-immutable structures (the sets are there for interface conformance with NO
+      * impelmentation).  In short, you need to call this function passing it a reference
+      * to the Workbook object.  All labels will be converted to LabelSST records and their
+      * contained strings will be written to the Shared String tabel (SSTRecord) within
+      * the Workbook.
+      *
+      * @param wb sheet's matching low level Workbook structure containing the SSTRecord.
+      * @see org.apache.poi.hssf.record.LabelRecord
+      * @see org.apache.poi.hssf.record.LabelSSTRecord
+      * @see org.apache.poi.hssf.record.SSTRecord
+      */
+     private void convertLabelRecords(List records, int offset)
+     {
+         if (log.check( POILogger.DEBUG ))
+             log.log(POILogger.DEBUG, "convertLabelRecords called");
+         for (int k = offset; k < records.size(); k++)
+         {
+             Record rec = ( Record ) records.get(k);
+
+             if (rec.getSid() == LabelRecord.sid)
+             {
+                 LabelRecord oldrec = ( LabelRecord ) rec;
+
+                 records.remove(k);
+                 LabelSSTRecord newrec   = new LabelSSTRecord();
+                 int            stringid =
+                     workbook.addSSTString(new UnicodeString(oldrec.getValue()));
+
+                 newrec.setRow(oldrec.getRow());
+                 newrec.setColumn(oldrec.getColumn());
+                 newrec.setXFIndex(oldrec.getXFIndex());
+                 newrec.setSSTIndex(stringid);
+                       records.add(k, newrec);
+             }
+         }
+         if (log.check( POILogger.DEBUG ))
+             log.log(POILogger.DEBUG, "convertLabelRecords exit");
+     }
+    
 
     /**
      * sets the order of appearance for a given sheet.