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
This commit is contained in:
parent
f3df5ee67f
commit
a44b51ac5a
@ -576,53 +576,6 @@ public class Sheet implements Model
|
|||||||
return numMergedRegions;
|
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
|
* Returns the number of low level binary records in this sheet. This adjusts things for the so called
|
||||||
* AgregateRecords.
|
* AgregateRecords.
|
||||||
|
@ -186,14 +186,14 @@ public class HSSFWorkbook
|
|||||||
setPropertiesFromWorkbook(workbook);
|
setPropertiesFromWorkbook(workbook);
|
||||||
int recOffset = workbook.getNumRecords();
|
int recOffset = workbook.getNumRecords();
|
||||||
int sheetNum = 0;
|
int sheetNum = 0;
|
||||||
|
|
||||||
|
// convert all LabelRecord records to LabelSSTRecord
|
||||||
|
convertLabelRecords(records, recOffset);
|
||||||
while (recOffset < records.size())
|
while (recOffset < records.size())
|
||||||
{
|
{
|
||||||
Sheet sheet = Sheet.createSheet(records, sheetNum++, recOffset );
|
Sheet sheet = Sheet.createSheet(records, sheetNum++, recOffset );
|
||||||
|
|
||||||
recOffset = sheet.getEofLoc()+1;
|
recOffset = sheet.getEofLoc()+1;
|
||||||
sheet.convertLabelRecords(
|
|
||||||
workbook); // convert all LabelRecord records to LabelSSTRecord
|
|
||||||
HSSFSheet hsheet = new HSSFSheet(workbook, sheet);
|
HSSFSheet hsheet = new HSSFSheet(workbook, sheet);
|
||||||
|
|
||||||
sheets.add(hsheet);
|
sheets.add(hsheet);
|
||||||
@ -240,6 +240,51 @@ public class HSSFWorkbook
|
|||||||
|
|
||||||
// none currently
|
// 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.
|
* sets the order of appearance for a given sheet.
|
||||||
|
Loading…
Reference in New Issue
Block a user