aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/poi/hssf/usermodel
diff options
context:
space:
mode:
authorJason Height <jheight@apache.org>2005-08-26 03:40:34 +0000
committerJason Height <jheight@apache.org>2005-08-26 03:40:34 +0000
commit29ed3fdea261afcbcbcee7f75fe181ba368d4032 (patch)
treed41a9435683e92e2393ba9c85a97a84bdd6b1eb8 /src/java/org/apache/poi/hssf/usermodel
parentcea5e5c6d1293b653858d800ec3b1ec498fd800a (diff)
downloadpoi-29ed3fdea261afcbcbcee7f75fe181ba368d4032.tar.gz
poi-29ed3fdea261afcbcbcee7f75fe181ba368d4032.zip
Applied patch to convert LabelRecords to LabelSSTRecords from bug19053
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
Diffstat (limited to 'src/java/org/apache/poi/hssf/usermodel')
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java51
1 files changed, 48 insertions, 3 deletions
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
index 414ff24a14..fe6559a8c1 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
@@ -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.