// TODO make this class into a record aggregate private static ExternSheetRecord ReadExtSheetRecord(RecordStream rs) { List <ExternSheetRecord> temp = new List <ExternSheetRecord>(2); while (rs.PeekNextClass() == typeof(ExternSheetRecord)) { temp.Add((ExternSheetRecord)rs.GetNext()); } int nItems = temp.Count; if (nItems < 1) { throw new Exception("Expected an EXTERNSHEET record but got (" + rs.PeekNextClass().Name + ")"); } if (nItems == 1) { // this is the normal case. There should be just one ExternSheetRecord return(temp[0]); } // Some apps generate multiple ExternSheetRecords (see bug 45698). // It seems like the best thing to do might be to combine these into one ExternSheetRecord[] esrs = new ExternSheetRecord[nItems]; esrs = temp.ToArray(); return(ExternSheetRecord.Combine(esrs)); }
public ChartSubstreamRecordAggregate(RecordStream rs) { _bofRec = (BOFRecord)rs.GetNext(); List<RecordBase> temp = new List<RecordBase>(); while (rs.PeekNextClass() != typeof(EOFRecord)) { Type a = rs.PeekNextClass(); if (PageSettingsBlock.IsComponentRecord(rs.PeekNextSid())) { if (_psBlock != null) { if (rs.PeekNextSid() == HeaderFooterRecord.sid) { // test samples: 45538_classic_Footer.xls, 45538_classic_Header.xls _psBlock.AddLateHeaderFooter((HeaderFooterRecord)rs.GetNext()); continue; } throw new InvalidDataException( "Found more than one PageSettingsBlock in chart sub-stream"); } _psBlock = new PageSettingsBlock(rs); temp.Add(_psBlock); continue; } temp.Add(rs.GetNext()); } _recs = temp; Record eof = rs.GetNext(); // no need to save EOF in field if (!(eof is EOFRecord)) { throw new InvalidOperationException("Bad chart EOF"); } }
// TODO make this class into a record aggregate private static ExternSheetRecord ReadExtSheetRecord(RecordStream rs) { List<ExternSheetRecord> temp = new List<ExternSheetRecord>(2); while (rs.PeekNextClass() == typeof(ExternSheetRecord)) { temp.Add((ExternSheetRecord)rs.GetNext()); } int nItems = temp.Count; if (nItems < 1) { throw new Exception("Expected an EXTERNSHEET record but got (" + rs.PeekNextClass().Name + ")"); } if (nItems == 1) { // this is the normal case. There should be just one ExternSheetRecord return temp[0]; } // Some apps generate multiple ExternSheetRecords (see bug 45698). // It seems like the best thing to do might be to combine these into one ExternSheetRecord[] esrs = new ExternSheetRecord[nItems]; esrs = temp.ToArray(); return ExternSheetRecord.Combine(esrs); }
private WorkbookRecordList _workbookRecordList; // TODO - would be nice to Remove this public LinkTable(List <Record> inputList, int startIndex, WorkbookRecordList workbookRecordList) { _workbookRecordList = workbookRecordList; RecordStream rs = new RecordStream(inputList, startIndex); ArrayList temp = new ArrayList(); while (rs.PeekNextClass() == typeof(SupBookRecord)) { temp.Add(new ExternalBookBlock(rs)); } //_externalBookBlocks = new ExternalBookBlock[temp.Count]; _externalBookBlocks = (ExternalBookBlock[])temp.ToArray(typeof(ExternalBookBlock)); temp.Clear(); if (_externalBookBlocks.Length > 0) { // If any ExternalBookBlock present, there is always 1 of ExternSheetRecord if (rs.PeekNextClass() != typeof(ExternSheetRecord)) { // not quite - if written by google docs _externSheetRecord = null; } else { _externSheetRecord = ReadExtSheetRecord(rs); } } else { _externSheetRecord = null; } _definedNames = new List <NameRecord>(); // collect zero or more DEFINEDNAMEs id=0x18 while (rs.PeekNextClass() == typeof(NameRecord)) { NameRecord nr = (NameRecord)rs.GetNext(); _definedNames.Add(nr); } _recordCount = rs.GetCountRead(); for (int i = startIndex; i < startIndex + _recordCount; i++) { _workbookRecordList.Records.Add(inputList[i]); } }
public void TestAbnormalPivotTableRecords_bug46280() { int SXVIEW_SID = ViewDefinitionRecord.sid; Record[] inRecs = { new RowRecord(0), new NumberRecord(), // normally MSODRAWING(0x00EC) would come here before SXVIEW new UnknownRecord(SXVIEW_SID, System.Text.Encoding.UTF8.GetBytes("dummydata (SXVIEW: View DefInition)")), new WindowTwoRecord(), }; RecordStream rs = new RecordStream(Arrays.AsList(inRecs), 0); RowBlocksReader rbr = new RowBlocksReader(rs); if (rs.PeekNextClass() == typeof(WindowTwoRecord)) { // Should have stopped at the SXVIEW record throw new AssertionException("Identified bug 46280b"); } RecordStream rbStream = rbr.PlainRecordStream; Assert.AreEqual(inRecs[0], rbStream.GetNext()); Assert.AreEqual(inRecs[1], rbStream.GetNext()); Assert.IsFalse(rbStream.HasNext()); Assert.IsTrue(rs.HasNext()); Assert.AreEqual(inRecs[2], rs.GetNext()); Assert.AreEqual(inRecs[3], rs.GetNext()); }
public void TestAbnormalPivotTableRecords_bug46280() { int SXVIEW_SID = ViewDefinitionRecord.sid; Record[] inRecs = { new RowRecord(0), new NumberRecord(), // normally MSODRAWING(0x00EC) would come here before SXVIEW new UnknownRecord(SXVIEW_SID,System.Text.Encoding.UTF8.GetBytes("dummydata (SXVIEW: View DefInition)")), new WindowTwoRecord(), }; RecordStream rs = new RecordStream(Arrays.AsList(inRecs), 0); RowBlocksReader rbr = new RowBlocksReader(rs); if (rs.PeekNextClass() == typeof(WindowTwoRecord)) { // Should have stopped at the SXVIEW record throw new AssertFailedException("Identified bug 46280b"); } RecordStream rbStream = rbr.PlainRecordStream; Assert.AreEqual(inRecs[0], rbStream.GetNext()); Assert.AreEqual(inRecs[1], rbStream.GetNext()); Assert.IsFalse(rbStream.HasNext()); Assert.IsTrue(rs.HasNext()); Assert.AreEqual(inRecs[2], rs.GetNext()); Assert.AreEqual(inRecs[3], rs.GetNext()); }
public ChartSheetAggregate(RecordStream rs, ChartRecordAggregate container) : base(RuleName_CHARTSHEET, container) { _bofRec = (BOFRecord)rs.GetNext(); List<RecordBase> temp = new List<RecordBase>(); while (rs.PeekNextClass() != typeof(EOFRecord)) { Type a = rs.PeekNextClass(); if (PageSettingsBlock.IsComponentRecord(rs.PeekNextChartSid())) { if (_psBlock != null) { if (rs.PeekNextChartSid() == HeaderFooterRecord.sid) { // test samples: 45538_classic_Footer.xls, 45538_classic_Header.xls _psBlock.AddLateHeaderFooter((HeaderFooterRecord)rs.GetNext()); continue; } throw new InvalidDataException( "Found more than one PageSettingsBlock in chart sub-stream"); } _psBlock = new PageSettingsBlock(rs); temp.Add(_psBlock); continue; } if (rs.PeekNextChartSid() == ChartRecord.sid) { chartFormats = new ChartFormatsAggregate(rs, this); temp.Add(chartFormats); continue; } if (rs.PeekNextChartSid() == DimensionsRecord.sid) { seriesData = new SeriesDataAggregate(rs); temp.Add(seriesData); continue; } temp.Add(rs.GetNext()); } _recs = temp; Record eof = rs.GetNext(); // no need to save EOF in field if (!(eof is EOFRecord)) { throw new InvalidOperationException("Bad chart EOF"); } }
public ConditionalFormattingTable(RecordStream rs) { IList temp = new ArrayList(); while (rs.PeekNextClass() == typeof(CFHeaderRecord)) { temp.Add(CFRecordsAggregate.CreateCFAggregate(rs)); } _cfHeaders = temp; }
public DataValidityTable(RecordStream rs) { _headerRec = (DVALRecord)rs.GetNext(); IList temp = new ArrayList(); while (rs.PeekNextClass() == typeof(DVRecord)) { temp.Add(rs.GetNext()); } _validationList = temp; }
public ExternalBookBlock(RecordStream rs) { _externalBookRecord = (SupBookRecord)rs.GetNext(); ArrayList temp = new ArrayList(); while (rs.PeekNextClass() == typeof(ExternalNameRecord)) { temp.Add(rs.GetNext()); } _externalNameRecords = (ExternalNameRecord[])temp.ToArray(typeof(ExternalNameRecord)); temp.Clear(); while (rs.PeekNextClass() == typeof(CRNCountRecord)) { temp.Add(new CRNBlock(rs)); } _crnBlocks = (CRNBlock[])temp.ToArray(typeof(CRNBlock)); }
/** * Reads zero or more consecutive {@link MergeCellsRecord}s * @param rs */ public void Read(RecordStream rs) { IList temp = _mergedRegions; while (rs.PeekNextClass() == typeof(MergeCellsRecord)) { MergeCellsRecord mcr = (MergeCellsRecord)rs.GetNext(); int nRegions = mcr.NumAreas; for (int i = 0; i < nRegions; i++) { temp.Add(mcr.GetAreaAt(i)); } } }
/// <summary> /// Initializes a new instance of the <see cref="ColumnInfoRecordsAggregate"/> class. /// </summary> /// <param name="rs">The rs.</param> public ColumnInfoRecordsAggregate(RecordStream rs): this() { bool isInOrder = true; ColumnInfoRecord cirPrev = null; while (rs.PeekNextClass() == typeof(ColumnInfoRecord)) { ColumnInfoRecord cir = (ColumnInfoRecord)rs.GetNext(); records.Add(cir); if (cirPrev != null && CIRComparator.CompareColInfos(cirPrev, cir) > 0) { isInOrder = false; } cirPrev = cir; } if (records.Count < 1) { throw new InvalidOperationException("No column info records found"); } if (!isInOrder) { records.Sort(CIRComparator.instance); } }
public void Construct(CellValueRecordInterface rec, RecordStream rs, SharedValueManager sfh) { if (rec is FormulaRecord) { FormulaRecord formulaRec = (FormulaRecord)rec; // read optional cached text value StringRecord cachedText=null; Type nextClass = rs.PeekNextClass(); if (nextClass == typeof(StringRecord)) { cachedText = (StringRecord)rs.GetNext(); } else { cachedText = null; } InsertCell(new FormulaRecordAggregate(formulaRec, cachedText, sfh)); } else { InsertCell(rec); } }
private WorkbookRecordList _workbookRecordList; // TODO - would be nice to Remove this public LinkTable(List<Record> inputList, int startIndex, WorkbookRecordList workbookRecordList, Dictionary<String, NameCommentRecord> commentRecords) { _workbookRecordList = workbookRecordList; RecordStream rs = new RecordStream(inputList, startIndex); ArrayList temp = new ArrayList(); while (rs.PeekNextClass() == typeof(SupBookRecord)) { temp.Add(new ExternalBookBlock(rs)); } //_externalBookBlocks = new ExternalBookBlock[temp.Count]; _externalBookBlocks = (ExternalBookBlock[])temp.ToArray(typeof(ExternalBookBlock)); temp.Clear(); if (_externalBookBlocks.Length > 0) { // If any ExternalBookBlock present, there is always 1 of ExternSheetRecord if (rs.PeekNextClass() != typeof(ExternSheetRecord)) { // not quite - if written by google docs _externSheetRecord = null; } else { _externSheetRecord = ReadExtSheetRecord(rs); } } else { _externSheetRecord = null; } _definedNames = new List<NameRecord>(); // collect zero or more DEFINEDNAMEs id=0x18 while (true) { Type nextClass = rs.PeekNextClass(); if (nextClass == typeof(NameRecord)) { NameRecord nr = (NameRecord)rs.GetNext(); _definedNames.Add(nr); } else if (nextClass == typeof(NameCommentRecord)) { NameCommentRecord ncr = (NameCommentRecord)rs.GetNext(); //commentRecords.Add(ncr.NameText, ncr); commentRecords[ncr.NameText] = ncr; } else { break; } } _recordCount = rs.GetCountRead(); for (int i = startIndex; i < startIndex + _recordCount; i++) { _workbookRecordList.Records.Add(inputList[i]); } }
private WorkbookRecordList _workbookRecordList; // TODO - would be nice to Remove this public LinkTable(IList inputList, int startIndex, WorkbookRecordList workbookRecordList) { _workbookRecordList = workbookRecordList; RecordStream rs = new RecordStream(inputList, startIndex); ArrayList temp = new ArrayList(); while (rs.PeekNextClass() == typeof(SupBookRecord)) { temp.Add(new ExternalBookBlock(rs)); } //_externalBookBlocks = new ExternalBookBlock[temp.Count]; _externalBookBlocks=(ExternalBookBlock[])temp.ToArray(typeof(ExternalBookBlock)); temp.Clear(); if (_externalBookBlocks.Length > 0) { // If any ExternalBookBlock present, there Is always 1 of ExternSheetRecord Record next = rs.GetNext(); _externSheetRecord = (ExternSheetRecord)next; } else { _externSheetRecord = null; } _definedNames = new ArrayList(); // collect zero or more DEFINEDNAMEs id=0x18 while (rs.PeekNextClass() == typeof(NameRecord)) { NameRecord nr = (NameRecord)rs.GetNext(); _definedNames.Add(nr); } _recordCount = rs.GetCountRead(); for(int i=startIndex;i< startIndex + _recordCount;i++) { _workbookRecordList.Records.Add(inputList[i]); } }