private static void SetRow(SheetRecord currentSheet, Record record) { if (record is RowRecord && currentSheet != null) { currentSheet.Rows.Add(record as RowRecord); } }
private static void SetMergeCells(SheetRecord currentSheet, Record record) { if (record is MergeCellsRecord && currentSheet != null) { currentSheet.MergeCells.Add(record as MergeCellsRecord); } }
private static void SetCell(SheetRecord currentSheet, Record record) { if (record is CellRecord && currentSheet != null) { currentSheet.Cells.Add(record as CellRecord); } }
public SchLibRenderer(SheetRecord sheet, Dictionary <string, Image> embeddedImages, List <SchComponent> assets) { _sheet = sheet; _embeddedImages = embeddedImages; _assets = assets; Part = 1; }
private void GetSheetRecords(List <SheetRecord> sheets, ref SstRecord sst, ref SheetRecord currentSheet, Record record) { SetSST(record, ref sst); SetSheets(sheets, record); currentSheet = SetIndex(sheets, currentSheet, record); SetRow(currentSheet, record); SetCell(currentSheet, record); SetMergeCells(currentSheet, record); }
//public uint FirstCol { get; private set; } //public uint LastCol { get; private set; } public XLSSheet(SheetRecord record) { Name = record.Sheet.Name; FirstRow = record.Index.FirstRow; LastRow = record.Index.LastRow; Rows = new Dictionary <uint, IRow>(); foreach (var item in record.Rows) { Rows.Add(item.RowNumber, new XLSRow(item, record)); } HandleMergeCells(record); }
private static SheetRecord SetIndex(List <SheetRecord> sheets, SheetRecord currentSheet, Record record) { if (record is IndexRecord) { currentSheet = sheets.FirstOrDefault(i => i.Index == null); if (currentSheet != null) { currentSheet.Index = record as IndexRecord; } } return(currentSheet); }
public XLSRow(RowRecord record, SheetRecord sheet) { Cells = new Dictionary <uint, ICell>(); foreach (var cell in sheet.Cells.Where(i => i.Row == record.RowNumber)) { if (cell is LabelSstRecord) { (cell as LabelSstRecord).SetValue(sheet.SST); } AddCell(cell); } }
private void HandleMergeCells(SheetRecord record) { foreach (var mergeCells in record.MergeCells) { foreach (var mergeCell in mergeCells.MergeCells) { var value = GetFirstMergeCellValue(mergeCell); if (value != null) { SetMergeCellValue(mergeCell, value); } } } }
private void Load(XLSFile file) { List <SheetRecord> sheets = new List <SheetRecord>(); using (var stream = GetWorkBookStream(file)) { SstRecord sst = null; SheetRecord currentSheet = null; while (stream.Length - stream.Position >= BIFFData.MinSize) { var record = GetRecord(new BIFFData(stream), stream); if (record != null) { GetSheetRecords(sheets, ref sst, ref currentSheet, record); } } sheets.ForEach(i => i.SST = sst); } if (sheets.Count > 0) { GetSheets(sheets); } }
public XlsxWorksheet(ZipWorker document, XlsxWorkbook workbook, SheetRecord refSheet) { Document = document; Workbook = workbook; Name = refSheet.Name; Id = refSheet.Id; Rid = refSheet.Rid; VisibleState = refSheet.VisibleState; Path = refSheet.Path; DefaultRowHeight = 15; if (string.IsNullOrEmpty(Path)) { return; } using var sheetStream = Document.GetWorksheetReader(Path); if (sheetStream == null) { return; } int rowIndexMaximum = int.MinValue; int columnIndexMaximum = int.MinValue; List <Column> columnWidths = new List <Column>(); List <CellRange> cellRanges = new List <CellRange>(); bool inSheetData = false; Record record; while ((record = sheetStream.Read()) != null) { switch (record) { case SheetDataBeginRecord _: inSheetData = true; break; case SheetDataEndRecord _: inSheetData = false; break; case RowHeaderRecord row when inSheetData: rowIndexMaximum = Math.Max(rowIndexMaximum, row.RowIndex); break; case CellRecord cell when inSheetData: columnIndexMaximum = Math.Max(columnIndexMaximum, cell.ColumnIndex); break; case ColumnRecord column: columnWidths.Add(column.Column); break; case SheetFormatPrRecord sheetFormatProperties: if (sheetFormatProperties.DefaultRowHeight != null) { DefaultRowHeight = sheetFormatProperties.DefaultRowHeight.Value; } break; case SheetPrRecord sheetProperties: CodeName = sheetProperties.CodeName; break; case MergeCellRecord mergeCell: cellRanges.Add(mergeCell.Range); break; case HeaderFooterRecord headerFooter: HeaderFooter = headerFooter.HeaderFooter; break; } } ColumnWidths = columnWidths.ToArray(); MergeCells = cellRanges.ToArray(); if (rowIndexMaximum != int.MinValue && columnIndexMaximum != int.MinValue) { FieldCount = columnIndexMaximum + 1; RowCount = rowIndexMaximum + 1; } }
/// <summary> /// Instantiates a record according to its record type number. /// </summary> /// <param name="recordType">Integer representing the record type.</param> /// <returns>A new empty instance of a record primitive.</returns> private SchPrimitive CreateRecord(int recordType) { SchPrimitive record; switch (recordType) { case 1: record = new SchComponent(); break; case 2: record = new PinRecord(); break; case 3: record = new SymbolRecord(); break; case 4: record = new TextStringRecord(); break; case 5: record = new BezierRecord(); break; case 6: record = new PolylineRecord(); break; case 7: record = new PolygonRecord(); break; case 8: record = new EllipseRecord(); break; case 9: record = new PieChartRecord(); break; case 10: record = new RoundedRectangleRecord(); break; case 11: record = new EllipticalArcRecord(); break; case 12: record = new ArcRecord(); break; case 13: record = new LineRecord(); break; case 14: record = new RectangleRecord(); break; case 17: record = new PowerPortRecord(); break; case 25: record = new NetLabelRecord(); break; case 27: record = new WireRecord(); break; case 29: record = new JunctionRecord(); break; case 28: case 209: record = new TextFrameRecord(); break; case 30: record = new ImageRecord(); break; case 31: record = new SheetRecord(); break; case 34: record = new Record34(); break; case 41: record = new Record41(); break; case 44: record = new Record44(); break; case 45: record = new Record45(); break; case 46: record = new Record46(); break; case 48: record = new Record48(); break; default: EmitWarning($"Record {recordType} not supported"); record = new SchPrimitive(); break; } return(record); }