本文整理汇总了C#中NPOI.HSSF.Model.RecordStream.PeekNextSid方法的典型用法代码示例。如果您正苦于以下问题:C# RecordStream.PeekNextSid方法的具体用法?C# RecordStream.PeekNextSid怎么用?C# RecordStream.PeekNextSid使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NPOI.HSSF.Model.RecordStream
的用法示例。
在下文中一共展示了RecordStream.PeekNextSid方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ChartSubstreamRecordAggregate
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");
}
}
示例2: CustomViewSettingsRecordAggregate
public CustomViewSettingsRecordAggregate(RecordStream rs)
{
_begin = rs.GetNext();
if (_begin.Sid != UserSViewBegin.sid)
{
throw new InvalidOperationException("Bad begin record");
}
List<RecordBase> temp = new List<RecordBase>();
while (rs.PeekNextSid() != UserSViewEnd.sid)
{
if (PageSettingsBlock.IsComponentRecord(rs.PeekNextSid()))
{
if (_psBlock != null)
{
throw new InvalidOperationException(
"Found more than one PageSettingsBlock in custom view Settings sub-stream");
}
_psBlock = new PageSettingsBlock(rs);
temp.Add(_psBlock);
continue;
}
temp.Add(rs.GetNext());
}
_recs = temp;
_end = rs.GetNext(); // no need to save EOF in field
if (_end.Sid != UserSViewEnd.sid)
{
throw new InvalidOperationException("Bad custom view Settings end record");
}
}
示例3: ReadARecord
private bool ReadARecord(RecordStream rs)
{
switch (rs.PeekNextSid())
{
case ProtectRecord.sid:
CheckNotPresent(_protectRecord);
_protectRecord = rs.GetNext() as ProtectRecord;
break;
case ObjectProtectRecord.sid:
CheckNotPresent(_objectProtectRecord);
_objectProtectRecord = rs.GetNext() as ObjectProtectRecord;
break;
case ScenarioProtectRecord.sid:
CheckNotPresent(_scenarioProtectRecord);
_scenarioProtectRecord = rs.GetNext() as ScenarioProtectRecord;
break;
case PasswordRecord.sid:
CheckNotPresent(_passwordRecord);
_passwordRecord = rs.GetNext() as PasswordRecord;
break;
default:
// all other record types are not part of the PageSettingsBlock
return false;
}
return true;
}
示例4: PLSAggregate
public PLSAggregate(RecordStream rs)
{
_pls = rs.GetNext();
if (rs.PeekNextSid() == ContinueRecord.sid)
{
List<ContinueRecord> temp = new List<ContinueRecord>();
while (rs.PeekNextSid() == ContinueRecord.sid)
{
temp.Add((ContinueRecord)rs.GetNext());
}
_plsContinues = new ContinueRecord[temp.Count];
_plsContinues = temp.ToArray();
}
else
{
_plsContinues = EMPTY_CONTINUE_RECORD_ARRAY;
}
}
示例5: RowBlocksReader
/**
* Also collects any loose MergeCellRecords and puts them in the supplied
* mergedCellsTable
*/
public RowBlocksReader(RecordStream rs)
{
ArrayList plainRecords = new ArrayList();
ArrayList shFrmRecords = new ArrayList();
ArrayList arrayRecords = new ArrayList();
ArrayList tableRecords = new ArrayList();
ArrayList mergeCellRecords = new ArrayList();
while (!RecordOrderer.IsEndOfRowBlock(rs.PeekNextSid()))
{
// End of row/cell records for the current sheet
// Note - It is important that this code does not inadvertently add any sheet
// records from a subsequent sheet. For example, if SharedFormulaRecords
// are taken from the wrong sheet, this could cause bug 44449.
if (!rs.HasNext())
{
throw new InvalidOperationException("Failed to find end of row/cell records");
}
Record rec = rs.GetNext();
IList dest;
switch (rec.Sid)
{
case MergeCellsRecord.sid:
dest = mergeCellRecords;
break;
case SharedFormulaRecord.sid:
dest = shFrmRecords;
break;
case ArrayRecord.sid:
dest = arrayRecords;
break;
case TableRecord.sid:
dest = tableRecords;
break;
default: dest = plainRecords;
break;
}
dest.Add(rec);
}
SharedFormulaRecord[] sharedFormulaRecs = new SharedFormulaRecord[shFrmRecords.Count];
ArrayRecord[] arrayRecs = new ArrayRecord[arrayRecords.Count];
TableRecord[] tableRecs = new TableRecord[tableRecords.Count];
sharedFormulaRecs = (SharedFormulaRecord[])shFrmRecords.ToArray(typeof(SharedFormulaRecord));
arrayRecs = (ArrayRecord[])arrayRecords.ToArray(typeof(ArrayRecord));
tableRecs = (TableRecord[])tableRecords.ToArray(typeof(TableRecord));
_plainRecords = plainRecords;
_sfm = SharedValueManager.Create(sharedFormulaRecs, arrayRecs, tableRecs);
_mergedCellsRecords = new MergeCellsRecord[mergeCellRecords.Count];
_mergedCellsRecords = (MergeCellsRecord[])mergeCellRecords.ToArray(typeof(MergeCellsRecord));
}
示例6: RowRecordsAggregate
/**
* @param rs record stream with all {@link SharedFormulaRecord}
* {@link ArrayRecord}, {@link TableRecord} {@link MergeCellsRecord} Records removed
*/
public RowRecordsAggregate(RecordStream rs, SharedValueManager svm)
: this(svm)
{
while (rs.HasNext())
{
Record rec = rs.GetNext();
switch (rec.Sid)
{
case RowRecord.sid:
InsertRow((RowRecord)rec);
continue;
case DBCellRecord.sid:
// end of 'Row Block'. Should only occur after cell records
// ignore DBCELL records because POI generates them upon re-serialization
continue;
}
if (rec is UnknownRecord)
{
// might need to keep track of where exactly these belong
AddUnknownRecord((UnknownRecord)rec);
while (rs.PeekNextSid() == ContinueRecord.sid)
{
AddUnknownRecord(rs.GetNext());
}
continue;
}
if (rec is MulBlankRecord) {
_valuesAgg.AddMultipleBlanks((MulBlankRecord) rec);
continue;
}
if (!(rec is CellValueRecordInterface))
{
throw new InvalidOperationException("Unexpected record type (" + rec.GetType().Name + ")");
}
_valuesAgg.Construct((CellValueRecordInterface)rec, rs, svm);
}
}
示例7: InternalChart
public InternalChart(RecordStream rs)
{
_plsRecords = new List<PLSAggregate>();
records = new List<RecordBase>(128);
if (rs.PeekNextSid() != BOFRecord.sid)
{
throw new Exception("BOF record expected");
}
BOFRecord bof = (BOFRecord)rs.GetNext();
if (bof.Type != BOFRecord.TYPE_CHART)
{
throw new RuntimeException("Bad BOF record type");
}
records.Add(bof);
while (rs.HasNext())
{
int recSid = rs.PeekNextSid();
Record.Record rec = rs.GetNext();
if (recSid == EOFRecord.sid)
{
records.Add(rec);
break;
}
if (recSid == ChartRecord.sid)
{
continue;
}
if (recSid == ChartFRTInfoRecord.sid)
{
_chartFrtInfo = (ChartFRTInfoRecord)rec;
}
else if (recSid == HeaderRecord.sid)
{
header = (HeaderRecord)rec;
}
else if (recSid == FooterRecord.sid)
{
footer = (FooterRecord)rec;
}
else if (recSid == HCenterRecord.sid)
{
_hCenter = (HCenterRecord)rec;
}
else if (recSid == VCenterRecord.sid)
{
_vCenter = (VCenterRecord)rec;
}
else if (recSid == LeftMarginRecord.sid)
{
_leftMargin = (LeftMarginRecord)rec;
}
else if (recSid == RightMarginRecord.sid)
{
_rightMargin = (RightMarginRecord)rec;
}
else if (recSid == TopMarginRecord.sid)
{
_topMargin = (TopMarginRecord)rec;
}
else if (recSid == BottomMarginRecord.sid)
{
_bottomMargin = (BottomMarginRecord)rec;
}
else if (recSid == UnknownRecord.PLS_004D) // PLS
{
PLSAggregate pls = new PLSAggregate(rs);
PLSAggregateVisitor rv = new PLSAggregateVisitor(records);
pls.VisitContainedRecords(rv);
_plsRecords.Add(pls);
continue;
}
else if (recSid == PrintSetupRecord.sid)
{
printSetup = (PrintSetupRecord)rec;
}
else if (recSid == PrintSizeRecord.sid)
{
_printSize = (PrintSizeRecord)rec;
}
else if (recSid == HeaderFooterRecord.sid)
{
HeaderFooterRecord hf = (HeaderFooterRecord)rec;
if (hf.IsCurrentSheet)
_headerFooter = hf;
else
_sviewHeaderFooters.Add(hf);
}
else if (recSid == ProtectRecord.sid)
{
_protect = (ProtectRecord)rec;
}
records.Add(rec);
}
//.........这里部分代码省略.........
示例8: ReadARecord
private bool ReadARecord(RecordStream rs)
{
switch (rs.PeekNextSid())
{
case HorizontalPageBreakRecord.sid:
CheckNotPresent(_rowBreaksRecord);
_rowBreaksRecord = (PageBreakRecord)rs.GetNext();
break;
case VerticalPageBreakRecord.sid:
CheckNotPresent(_columnBreaksRecord);
_columnBreaksRecord = (PageBreakRecord)rs.GetNext();
break;
case HeaderRecord.sid:
CheckNotPresent(header);
header = (HeaderRecord)rs.GetNext();
break;
case FooterRecord.sid:
CheckNotPresent(footer);
footer = (FooterRecord)rs.GetNext();
break;
case HCenterRecord.sid:
CheckNotPresent(_hCenter);
_hCenter = (HCenterRecord)rs.GetNext();
break;
case VCenterRecord.sid:
CheckNotPresent(_vCenter);
_vCenter = (VCenterRecord)rs.GetNext();
break;
case LeftMarginRecord.sid:
CheckNotPresent(_leftMargin);
_leftMargin = (LeftMarginRecord)rs.GetNext();
break;
case RightMarginRecord.sid:
CheckNotPresent(_rightMargin);
_rightMargin = (RightMarginRecord)rs.GetNext();
break;
case TopMarginRecord.sid:
CheckNotPresent(_topMargin);
_topMargin = (TopMarginRecord)rs.GetNext();
break;
case BottomMarginRecord.sid:
CheckNotPresent(_bottomMargin);
_bottomMargin = (BottomMarginRecord)rs.GetNext();
break;
case UnknownRecord.PLS_004D: // PLS
_plsRecords.Add(new PLSAggregate(rs));
break;
case PrintSetupRecord.sid:
CheckNotPresent(printSetup);
printSetup = (PrintSetupRecord)rs.GetNext();
break;
case UnknownRecord.BITMAP_00E9: // BITMAP
CheckNotPresent(_bitmap);
_bitmap = rs.GetNext();
break;
case PrintSizeRecord.sid:
CheckNotPresent(_printSize);
_printSize = rs.GetNext();
break;
case HeaderFooterRecord.sid:
HeaderFooterRecord hf = (HeaderFooterRecord)rs.GetNext();
if (hf.IsCurrentSheet)
_headerFooter = hf;
else
_sviewHeaderFooters.Add(hf);
break;
default:
// all other record types are not part of the PageSettingsBlock
return false;
}
return true;
}
示例9: RowRecordsAggregate
/**
* @param rs record stream with all {@link SharedFormulaRecord}
* {@link ArrayRecord}, {@link TableRecord} {@link MergeCellsRecord} Records removed
*/
public RowRecordsAggregate(RecordStream rs, SharedValueManager svm)
: this(svm)
{
while (rs.HasNext())
{
Record rec = rs.GetNext();
switch (rec.Sid)
{
case RowRecord.sid:
InsertRow((RowRecord)rec);
continue;
case DConRefRecord.sid:
AddUnknownRecord(rec);
continue;
case DBCellRecord.sid:
// end of 'Row Block'. Should only occur after cell records
// ignore DBCELL records because POI generates them upon re-serialization
continue;
}
if (rec is UnknownRecord)
{
// might need to keep track of where exactly these belong
AddUnknownRecord((UnknownRecord)rec);
while (rs.PeekNextSid() == ContinueRecord.sid)
{
AddUnknownRecord(rs.GetNext());
}
continue;
}
if (rec is MulBlankRecord) {
_valuesAgg.AddMultipleBlanks((MulBlankRecord) rec);
continue;
}
if (!(rec is CellValueRecordInterface))
{
//TODO: correct it, SeriesIndexRecord will appear in a separate chart sheet that contains a single chart
// rule SERIESDATA = Dimensions 3(SIIndex *(Number / BoolErr / Blank / Label))
if (rec.Sid == SeriesIndexRecord.sid)
{
AddUnknownRecord(rec);
continue;
}
throw new InvalidOperationException("Unexpected record type (" + rec.GetType().Name + ")");
}
_valuesAgg.Construct((CellValueRecordInterface)rec, rs, svm);
}
}
示例10: ReadARecord
private bool ReadARecord(RecordStream rs)
{
switch (rs.PeekNextSid())
{
case HorizontalPageBreakRecord.sid:
_rowBreaksRecord = (PageBreakRecord)rs.GetNext();
_rowRecords.Add(_rowBreaksRecord);
break;
case VerticalPageBreakRecord.sid:
_columnBreaksRecord = (PageBreakRecord)rs.GetNext();
_rowRecords.Add(_columnBreaksRecord);
break;
case HeaderRecord.sid:
header = (HeaderRecord)rs.GetNext();
_rowRecords.Add(header);
break;
case FooterRecord.sid:
footer = (FooterRecord)rs.GetNext();
_rowRecords.Add(footer);
break;
case HCenterRecord.sid:
_hCenter = (HCenterRecord)rs.GetNext();
_rowRecords.Add(_hCenter);
break;
case VCenterRecord.sid:
_vCenter = (VCenterRecord)rs.GetNext();
_rowRecords.Add(_vCenter);
break;
case LeftMarginRecord.sid:
_leftMargin = (LeftMarginRecord)rs.GetNext();
_rowRecords.Add(_leftMargin);
break;
case RightMarginRecord.sid:
_rightMargin = (RightMarginRecord)rs.GetNext();
_rowRecords.Add(_rightMargin);
break;
case TopMarginRecord.sid:
_topMargin = (TopMarginRecord)rs.GetNext();
_rowRecords.Add(_topMargin);
break;
case BottomMarginRecord.sid:
_bottomMargin = (BottomMarginRecord)rs.GetNext();
_rowRecords.Add(_bottomMargin);
break;
case 0x004D: // PLS
_pls = rs.GetNext();
_rowRecords.Add(_pls);
break;
case PrintSetupRecord.sid:
printSetup = (PrintSetupRecord)rs.GetNext();
_rowRecords.Add(printSetup);
break;
case 0x00E9: // BITMAP
_bitmap = rs.GetNext();
_rowRecords.Add(_bitmap);
break;
default:
// all other record types are not part of the PageSettingsBlock
return false;
}
return true;
}
示例11: InternalSheet
/// <summary>
/// Initializes a new instance of the <see cref="InternalSheet"/> class.
/// </summary>
/// <param name="rs">The stream.</param>
private InternalSheet(RecordStream rs)
{
_mergedCellsTable = new MergedCellsTable();
RowRecordsAggregate rra = null;
records = new List<RecordBase>(128);
// TODO - take chart streams off into separate java objects
//int bofEofNestingLevel = 0; // nesting level can only get to 2 (when charts are present)
int dimsloc = -1;
if (rs.PeekNextSid() != BOFRecord.sid)
{
throw new Exception("BOF record expected");
}
BOFRecord bof = (BOFRecord)rs.GetNext();
if (bof.Type != BOFRecord.TYPE_WORKSHEET)
{
// TODO - fix junit tests throw new RuntimeException("Bad BOF record type");
}
records.Add(bof);
while (rs.HasNext())
{
int recSid = rs.PeekNextSid();
if (recSid == CFHeaderRecord.sid)
{
condFormatting = new ConditionalFormattingTable(rs);
records.Add(condFormatting);
continue;
}
if (recSid == ColumnInfoRecord.sid)
{
_columnInfos = new ColumnInfoRecordsAggregate(rs);
records.Add(_columnInfos);
continue;
}
if (recSid == DVALRecord.sid)
{
_dataValidityTable = new DataValidityTable(rs);
records.Add(_dataValidityTable);
continue;
}
if (RecordOrderer.IsRowBlockRecord(recSid))
{
//only Add the aggregate once
if (rra != null)
{
throw new InvalidOperationException("row/cell records found in the wrong place");
}
RowBlocksReader rbr = new RowBlocksReader(rs);
_mergedCellsTable.AddRecords(rbr.LooseMergedCells);
rra = new RowRecordsAggregate(rbr.PlainRecordStream, rbr.SharedFormulaManager);
records.Add(rra); //only Add the aggregate once
continue;
}
if (CustomViewSettingsRecordAggregate.IsBeginRecord(recSid))
{
// This happens three times in test sample file "29982.xls"
// Also several times in bugzilla samples 46840-23373 and 46840-23374
records.Add(new CustomViewSettingsRecordAggregate(rs));
continue;
}
if (PageSettingsBlock.IsComponentRecord(recSid))
{
if (_psBlock == null)
{
// first PSB record encountered - read all of them:
_psBlock = new PageSettingsBlock(rs);
records.Add(_psBlock);
}
else
{
// one or more PSB records found after some intervening non-PSB records
_psBlock.AddLateRecords(rs);
}
// YK: in some cases records can be moved to the preceding
// CustomViewSettingsRecordAggregate blocks
_psBlock.PositionRecords(records);
continue;
}
if (WorksheetProtectionBlock.IsComponentRecord(recSid))
{
_protectionBlock.AddRecords(rs);
continue;
}
if (recSid == MergeCellsRecord.sid)
{
// when the MergedCellsTable is found in the right place, we expect those records to be contiguous
_mergedCellsTable.Read(rs);
continue;
}
//.........这里部分代码省略.........
示例12: RowBlocksReader
/**
* Also collects any loose MergeCellRecords and puts them in the supplied
* mergedCellsTable
*/
public RowBlocksReader(RecordStream rs)
{
ArrayList plainRecords = new ArrayList();
ArrayList shFrmRecords = new ArrayList();
ArrayList arrayRecords = new ArrayList();
ArrayList tableRecords = new ArrayList();
ArrayList mergeCellRecords = new ArrayList();
List<CellReference> firstCellRefs = new List<CellReference>();
Record prevRec = null;
while (!RecordOrderer.IsEndOfRowBlock(rs.PeekNextSid()))
{
// End of row/cell records for the current sheet
// Note - It is important that this code does not inadvertently add any sheet
// records from a subsequent sheet. For example, if SharedFormulaRecords
// are taken from the wrong sheet, this could cause bug 44449.
if (!rs.HasNext())
{
throw new InvalidOperationException("Failed to find end of row/cell records");
}
Record rec = rs.GetNext();
ArrayList dest;
switch (rec.Sid)
{
case MergeCellsRecord.sid:
dest = mergeCellRecords;
break;
case SharedFormulaRecord.sid:
dest = shFrmRecords;
if (!(prevRec is FormulaRecord))
{
throw new Exception("Shared formula record should follow a FormulaRecord");
}
FormulaRecord fr = (FormulaRecord)prevRec;
firstCellRefs.Add(new CellReference(fr.Row, fr.Column));
break;
case ArrayRecord.sid:
dest = arrayRecords;
break;
case TableRecord.sid:
dest = tableRecords;
break;
default: dest = plainRecords;
break;
}
dest.Add(rec);
prevRec = rec;
}
SharedFormulaRecord[] sharedFormulaRecs = new SharedFormulaRecord[shFrmRecords.Count];
List<ArrayRecord> arrayRecs = new List<ArrayRecord>(arrayRecords.Count);
List<TableRecord> tableRecs = new List<TableRecord>(tableRecords.Count);
sharedFormulaRecs = (SharedFormulaRecord[])shFrmRecords.ToArray(typeof(SharedFormulaRecord));
CellReference[] firstCells = new CellReference[firstCellRefs.Count];
firstCells=firstCellRefs.ToArray();
arrayRecs = new List<ArrayRecord>((ArrayRecord[])arrayRecords.ToArray(typeof(ArrayRecord)));
tableRecs = new List<TableRecord>((TableRecord[])tableRecords.ToArray(typeof(TableRecord)));
_plainRecords = plainRecords;
_sfm = SharedValueManager.Create(sharedFormulaRecs,firstCells, arrayRecs, tableRecs);
_mergedCellsRecords = new MergeCellsRecord[mergeCellRecords.Count];
_mergedCellsRecords = (MergeCellsRecord[])mergeCellRecords.ToArray(typeof(MergeCellsRecord));
}
示例13: Sheet
/// <summary>
/// Initializes a new instance of the <see cref="Sheet"/> class.
/// </summary>
/// <param name="rs">The stream.</param>
private Sheet(RecordStream rs)
{
_mergedCellsTable = new MergedCellsTable();
RowRecordsAggregate rra = null;
records = new List<RecordBase>(128);
// TODO - take chart streams off into separate java objects
int bofEofNestingLevel = 0; // nesting level can only get to 2 (when charts are present)
int dimsloc = -1;
while (rs.HasNext())
{
int recSid = rs.PeekNextSid();
if (recSid == CFHeaderRecord.sid)
{
condFormatting = new ConditionalFormattingTable(rs);
records.Add(condFormatting);
continue;
}
if (recSid == ColumnInfoRecord.sid)
{
_columnInfos = new ColumnInfoRecordsAggregate(rs);
records.Add(_columnInfos);
continue;
}
if (recSid == DVALRecord.sid)
{
_dataValidityTable = new DataValidityTable(rs);
records.Add(_dataValidityTable);
continue;
}
if (RecordOrderer.IsRowBlockRecord(recSid) && bofEofNestingLevel == 1)
{
//only Add the aggregate once
if (rra != null)
{
throw new InvalidOperationException("row/cell records found in the wrong place");
}
RowBlocksReader rbr = new RowBlocksReader(rs);
_mergedCellsTable.AddRecords(rbr.LooseMergedCells);
rra = new RowRecordsAggregate(rbr.PlainRecordStream, rbr.SharedFormulaManager);
records.Add(rra); //only Add the aggregate once
continue;
}
if (PageSettingsBlock.IsComponentRecord(recSid))
{
PageSettingsBlock psb = new PageSettingsBlock(rs);
if (bofEofNestingLevel == 1)
{
if (_psBlock == null)
{
_psBlock = psb;
}
else
{
// more than one 'Page Settings Block' at nesting level 1 ?
// apparently this happens in about 15 test sample files
}
}
records.Add(psb);
continue;
}
if (recSid == MergeCellsRecord.sid)
{
// when the MergedCellsTable is found in the right place, we expect those records to be contiguous
_mergedCellsTable.Read(rs);
continue;
}
Record rec = rs.GetNext();
if (recSid == IndexRecord.sid)
{
// ignore INDEX record because it is only needed by Excel,
// and POI always re-calculates its contents
continue;
}
if (recSid == UncalcedRecord.sid)
{
// don't Add UncalcedRecord to the list
_isUncalced = true; // this flag is enough
continue;
}
if (recSid == BOFRecord.sid)
{
bofEofNestingLevel++;
//if (log.Check(POILogger.DEBUG))
// log.Log(POILogger.DEBUG, "Hit BOF record. Nesting increased to " + bofEofNestingLevel);
}
//.........这里部分代码省略.........