in poi/src/main/java/org/apache/poi/hssf/model/InternalWorkbook.java [197:334]
public static InternalWorkbook createWorkbook(List<Record> recs) {
LOG.atDebug().log("Workbook (readfile) created with reclen={}", box(recs.size()));
InternalWorkbook retval = new InternalWorkbook();
List<Record> records = new ArrayList<>(recs.size() / 3);
retval.records.setRecords(records);
boolean eofPassed = false;
for (int k = 0; k < recs.size(); k++) {
Record rec = recs.get(k);
String logObj;
switch (rec.getSid()) {
case EOFRecord.sid :
logObj = "workbook eof";
break;
case BoundSheetRecord.sid :
logObj = "boundsheet";
retval.boundsheets.add((BoundSheetRecord) rec);
retval.records.setBspos( k );
break;
case SSTRecord.sid :
logObj = "sst";
retval.sst = ( SSTRecord ) rec;
break;
case FontRecord.sid :
logObj = "font";
retval.records.setFontpos( k );
retval.numfonts++;
break;
case ExtendedFormatRecord.sid :
logObj = "XF";
retval.records.setXfpos( k );
retval.numxfs++;
break;
case TabIdRecord.sid :
logObj = "tabid";
retval.records.setTabpos( k );
break;
case ProtectRecord.sid :
logObj = "protect";
retval.records.setProtpos( k );
break;
case BackupRecord.sid :
logObj = "backup";
retval.records.setBackuppos( k );
break;
case ExternSheetRecord.sid :
throw new RecordFormatException("Extern sheet is part of LinkTable");
case NameRecord.sid :
case SupBookRecord.sid :
// LinkTable can start with either of these
LOG.atDebug().log("found SupBook record at {}", box(k));
retval.linkTable = new LinkTable(recs, k, retval.records, retval.commentRecords);
k+=retval.linkTable.getRecordCount() - 1;
continue;
case FormatRecord.sid :
logObj = "format";
FormatRecord fr = (FormatRecord) rec;
retval.formats.add(fr);
retval.maxformatid = Math.max(retval.maxformatid, fr.getIndexCode());
break;
case DateWindow1904Record.sid :
logObj = "datewindow1904";
retval.uses1904datewindowing = ((DateWindow1904Record)rec).getWindowing() == 1;
break;
case PaletteRecord.sid:
logObj = "palette";
retval.records.setPalettepos( k );
break;
case WindowOneRecord.sid:
logObj = "WindowOneRecord";
retval.windowOne = (WindowOneRecord) rec;
break;
case WriteAccessRecord.sid:
logObj = "WriteAccess";
retval.writeAccess = (WriteAccessRecord) rec;
break;
case WriteProtectRecord.sid:
logObj = "WriteProtect";
retval.writeProtect = (WriteProtectRecord) rec;
break;
case FileSharingRecord.sid:
logObj = "FileSharing";
retval.fileShare = (FileSharingRecord) rec;
break;
case NameCommentRecord.sid:
logObj = "NameComment";
final NameCommentRecord ncr = (NameCommentRecord) rec;
retval.commentRecords.put(ncr.getNameText(), ncr);
break;
case HyperlinkRecord.sid:
// Look for other interesting values that follow the EOFRecord
logObj = "Hyperlink";
retval.hyperlinks.add((HyperlinkRecord)rec);
break;
default:
logObj = "(sid=" + rec.getSid() + ")";
break;
}
if (!eofPassed) {
records.add(rec);
}
LOG.atTrace().log("found {} record at {}", logObj, box(k));
if (rec.getSid() == EOFRecord.sid) {
eofPassed = true;
}
}
//What if we dont have any ranges and supbooks
// if (retval.records.supbookpos == 0) {
// retval.records.supbookpos = retval.records.bspos + 1;
// retval.records.namepos = retval.records.supbookpos + 1;
// }
if (retval.windowOne == null) {
retval.windowOne = createWindowOne();
}
LOG.atDebug().log("exit create workbook from existing file function");
return retval;
}