Пример #1
0
 private static void SetRow(SheetRecord currentSheet, Record record)
 {
     if (record is RowRecord && currentSheet != null)
     {
         currentSheet.Rows.Add(record as RowRecord);
     }
 }
Пример #2
0
 private static void SetMergeCells(SheetRecord currentSheet, Record record)
 {
     if (record is MergeCellsRecord && currentSheet != null)
     {
         currentSheet.MergeCells.Add(record as MergeCellsRecord);
     }
 }
Пример #3
0
 private static void SetCell(SheetRecord currentSheet, Record record)
 {
     if (record is CellRecord && currentSheet != null)
     {
         currentSheet.Cells.Add(record as CellRecord);
     }
 }
Пример #4
0
 public SchLibRenderer(SheetRecord sheet, Dictionary <string, Image> embeddedImages, List <SchComponent> assets)
 {
     _sheet          = sheet;
     _embeddedImages = embeddedImages;
     _assets         = assets;
     Part            = 1;
 }
Пример #5
0
 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);
 }
Пример #6
0
        //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);
        }
Пример #7
0
 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);
 }
Пример #8
0
        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);
            }
        }
Пример #9
0
 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);
             }
         }
     }
 }
Пример #10
0
        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);
            }
        }
Пример #11
0
        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;
            }
        }
Пример #12
0
        /// <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);
        }